@colrealpro/react-luau-doctor 0.20.0 → 0.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js.map CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/cli.ts", "../src/config.ts", "../src/ast/walk.ts", "../src/ast/local-values.ts", "../src/rules/helpers.ts", "../src/rules/binding-rules.ts", "../src/rules/no-call-component-as-function.ts", "../src/module-resolution.ts", "../src/rules/parameter-mutations.ts", "../src/rules/no-mutating-state-updater.ts", "../src/rules/usememo-must-return.ts", "../src/rules/examples.ts", "../src/roblox-semantics.ts", "../src/rules/effect-needs-cleanup.ts", "../src/rules/effect-state-rules.ts", "../src/rules/dependency-tables.ts", "../src/rules/exhaustive-deps.ts", "../src/parser-compat.ts", "../src/rules/collection-key-kind.ts", "../src/rules/no-array-index-as-key.ts", "../src/rules/no-create-context-in-render.ts", "../src/rules/no-nested-component-definition.ts", "../src/rules/no-prop-mutation.ts", "../src/rules/no-static-name-prop.ts", "../src/rules/no-random-key.ts", "../src/rules/no-set-state-in-render.ts", "../src/rules/parse-errors.ts", "../src/rules/performance-rules.ts", "../src/rules/prefer-binding-over-state.ts", "../src/rules/react-roblox-lifecycle.ts", "../src/rules/ref-rules.ts", "../src/rules/render-side-effects.ts", "../src/rules/rules-of-hooks.ts", "../src/rules/state-performance.ts", "../src/rules/unstable-context-value.ts", "../src/rules/index.ts", "../src/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/context.ts", "../src/ast/react-model.ts", "../src/inline-disables.ts", "../src/parser.ts", "../src/parallel.ts", "../src/project-model.ts", "../src/project-effects.ts", "../src/update-check.ts", "../src/update-install.ts", "../src/presentation.ts", "../src/fix-preview.ts", "../src/why.ts", "../src/progress.ts"],
3
+ "sources": ["../src/cli.ts", "../src/config.ts", "../src/ast/walk.ts", "../src/ast/local-values.ts", "../src/rules/helpers.ts", "../src/rules/binding-rules.ts", "../src/rules/no-call-component-as-function.ts", "../src/module-resolution.ts", "../src/rules/parameter-mutations.ts", "../src/rules/no-mutating-state-updater.ts", "../src/rules/usememo-must-return.ts", "../src/rules/examples.ts", "../src/roblox-semantics.ts", "../src/rules/effect-needs-cleanup.ts", "../src/api-reference.ts", "../src/ast/value-identity.ts", "../src/rules/effect-state-rules.ts", "../src/rules/dependency-tables.ts", "../src/rules/exhaustive-deps.ts", "../src/parser-compat.ts", "../src/rules/collection-key-kind.ts", "../src/rules/no-array-index-as-key.ts", "../src/rules/no-create-context-in-render.ts", "../src/rules/no-nested-component-definition.ts", "../src/rules/no-prop-mutation.ts", "../src/rules/no-static-name-prop.ts", "../src/rules/no-random-key.ts", "../src/rules/no-set-state-in-render.ts", "../src/rules/parse-errors.ts", "../src/rules/performance-rules.ts", "../src/rules/prefer-binding-over-state.ts", "../src/rules/react-roblox-lifecycle.ts", "../src/rules/ref-rules.ts", "../src/rules/render-side-effects.ts", "../src/rules/rules-of-hooks.ts", "../src/rules/state-performance.ts", "../src/rules/unstable-context-value.ts", "../src/rules/index.ts", "../src/ci/index.ts", "../src/files.ts", "../src/git.ts", "../src/reporter.ts", "../src/ci/report.ts", "../src/ci/github.ts", "../src/scope.ts", "../src/scanner.ts", "../src/cache.ts", "../src/file-analysis.ts", "../src/ast/context.ts", "../src/ast/react-model.ts", "../src/inline-disables.ts", "../src/parser.ts", "../src/parallel.ts", "../src/project-model.ts", "../src/project-effects.ts", "../src/update-check.ts", "../src/update-install.ts", "../src/presentation.ts", "../src/fix-preview.ts", "../src/why.ts", "../src/progress.ts"],
4
4
  "sourcesContent": [
5
5
  "#!/usr/bin/env bun\r\n\r\nimport fs from \"node:fs\";\r\nimport os from \"node:os\";\r\nimport path from \"node:path\";\r\nimport packageJson from \"../package.json\";\r\n\r\nimport {\r\n effectiveSeverity,\r\n loadConfigWithSource,\r\n normalizeCategory,\r\n normalizeRuleSetting,\r\n writeConfig,\r\n} from \"./config\";\r\n\r\nimport { runCiCommand } from \"./ci\";\r\n\r\nimport {\r\n checkForUpdatesNow,\r\n fetchChangelogReleases,\r\n getCachedUpdateNotice,\r\n refreshUpdateCache,\r\n startBackgroundUpdateRefresh,\r\n type ChangelogRelease,\r\n} from \"./update-check\";\r\n\r\nimport {\r\n currentUpdateInstallCommand,\r\n installLatestVersion,\r\n} from \"./update-install\";\r\n\r\nimport {\r\n WHY_ANSI, WHY_THEME, whyPaint, whySectionTitle, wrapWhyWords,\r\n renderWhyFixPreview, renderWhyDiagnostic,\r\n} from \"./why\";\r\nimport { createProgressRenderer } from \"./progress\";\r\nimport { createInlineSuppressionChecker } from \"./inline-disables\";\r\n\r\nimport {\r\n renderAnnotations,\r\n renderRulesList,\r\n renderTextReport,\r\n} from \"./reporter\";\r\n\r\nimport { rules } from \"./rules\";\r\nimport { scanPath } from \"./scanner\";\r\nimport { aggregateReports, scanProjectWithScope } from \"./scope\";\r\n\r\nimport type {\r\n BlockingLevel,\r\n Category,\r\n Diagnostic,\r\n DoctorConfig,\r\n RuleDefinition,\r\n ScanProgress,\r\n ScanReport,\r\n ScanScope,\r\n Severity,\r\n} from \"./types\";\r\n\r\ninterface CliOptions {\r\n target: string;\r\n verbose?: boolean;\r\n debug: boolean;\r\n outputDir?: string;\r\n scoreOnly: boolean;\r\n json: boolean;\r\n jsonCompact: boolean;\r\n jsonOut?: string;\r\n project?: string;\r\n scope?: ScanScope;\r\n base?: string;\r\n includeUntracked: boolean;\r\n diff?: boolean | string;\r\n changedFilesFrom?: string;\r\n showScore?: boolean;\r\n categories: Category[];\r\n staged: boolean;\r\n maxDurationSeconds?: number;\r\n blocking?: BlockingLevel;\r\n respectInlineDisables?: boolean;\r\n warnings?: boolean;\r\n noColor: boolean;\r\n noCache: boolean;\r\n noParallel: boolean;\r\n noUpdateCheck: boolean;\r\n annotations: boolean;\r\n minSeverity?: Severity;\r\n help: boolean;\r\n version: boolean;\r\n}\r\n\r\nconst VERSION = packageJson.version;\r\nconst SCOPES = new Set<ScanScope>([\"full\", \"files\", \"changed\", \"lines\"]);\r\nconst BLOCKING = new Set<BlockingLevel>([\"error\", \"warning\", \"none\"]);\r\nconst SEVERITIES = new Set<Severity>([\"suggestion\", \"warning\", \"error\"]);\r\n\r\nprocess.stdout.on(\"error\", (error: Error & { code?: string }) => {\r\n if (error.code === \"EPIPE\") process.exit(0);\r\n\r\n throw error;\r\n});\r\n\r\nfunction usage(): string {\r\n return `React-Luau Doctor ${VERSION}\r\n\r\nUsage:\r\n react-luau-doctor [directory] [options]\r\n react-luau-doctor ci <install|config|upgrade>\r\n react-luau-doctor why <file:line>\r\n react-luau-doctor update [--check]\r\n react-luau-doctor rules <command>\r\n\r\nScan options:\r\n --verbose Show every finding and per-file details\r\n --debug Print resolved local scan details to stderr\r\n --output-dir <dir> Write report.json, diagnostics.json, and summary.json\r\n --score Output only the numeric score\r\n --json Output one structured JSON report\r\n --json-compact Emit compact JSON instead of indented JSON\r\n --json-out <path> Write the JSON report to a file\r\n --project <name> Select project directories, comma-separated\r\n --scope <value> full, files, changed, or lines\r\n --base <ref> Git base ref for files/changed/lines scope\r\n --include-untracked Include untracked files in git scopes\r\n --diff [base] Alias for changed scope; false forces full scope\r\n --changed-files-from <file> Read changed paths from a newline-delimited file\r\n --no-score Hide the local score\r\n --category <category> Only report a category; repeatable\r\n --staged Scan staged git-index content only\r\n --max-duration <seconds> Stop after a shared scan time budget and report partial results\r\n --blocking <level> Exit gate: error, warning, or none\r\n --respect-inline-disables Respect react-luau-doctor inline suppression comments\r\n --no-respect-inline-disables Ignore inline suppressions for audit scans\r\n --warnings / --no-warnings Show warnings (default) or errors only\r\n --annotations Emit GitHub Actions workflow annotations\r\n --no-color Disable automatic ANSI colors\r\n --no-cache Disable the persistent OS-level analysis cache\r\n --no-parallel Disable parallel file analysis\r\n --no-update-check Disable the automatic update notice\r\n\r\nReact-Luau Doctor options:\r\n --min-severity <level> suggestion, warning, or error\r\n -v, --version Print the version\r\n -h, --help Show this help\r\n\r\nCI commands:\r\n ci install [--provider github|gitlab] [--pr] [--blocking <level>] [--scope <value>] [reporting toggles] [-y] [--cwd <cwd>]\r\n ci config [--provider github|gitlab] [--blocking <level>] [--scope <value>] [reporting toggles] [-y] [--cwd <cwd>]\r\n ci upgrade [--provider github|gitlab] [--pr] [-y] [--cwd <cwd>]\r\n Reporting toggles: --comment/--no-comment, --review-comments/--no-review-comments, --commit-status/--no-commit-status\r\n\r\nUpdate commands:\r\n update Update the global installation to the latest release\r\n update --check Check npm and show release notes without updating\r\n\r\nRules commands:\r\n rules list [--category <name>] [--configured] [--json]\r\n rules explain <rule> [--json]\r\n rules set <rule> <severity>\r\n rules enable <rule> [--severity <level>]\r\n rules disable <rule>\r\n rules category <category> <severity>\r\n\r\nConfig:\r\n react-luau-doctor.config.json\r\n`;\r\n}\r\n\r\nfunction automaticUpdateNoticeEnabled(\r\n options: CliOptions,\r\n machineReadable: boolean,\r\n): boolean {\r\n return (\r\n !options.noUpdateCheck &&\r\n !machineReadable &&\r\n Boolean(process.stdout.isTTY) &&\r\n !process.env.CI &&\r\n process.env.NO_UPDATE_NOTIFIER === undefined &&\r\n process.env.REACT_LUAU_DOCTOR_NO_UPDATE_CHECK === undefined\r\n );\r\n}\r\n\r\nfunction renderUpdateHeader(\r\n current: string,\r\n latest: string,\r\n colorized: boolean,\r\n): string {\r\n const label = whyPaint(\r\n colorized,\r\n \"Update available:\",\r\n WHY_ANSI.bold,\r\n WHY_ANSI.yellow,\r\n );\r\n\r\n const oldVersion = whyPaint(colorized, `v${current}`, WHY_ANSI.dim);\r\n const newVersion = whyPaint(colorized, `v${latest}`, WHY_ANSI.bold);\r\n\r\n return `${label} ${oldVersion} → ${newVersion}`;\r\n}\r\n\r\nfunction renderUpdateNotice(\r\n current: string,\r\n latest: string,\r\n colorized: boolean,\r\n): string {\r\n return `${renderUpdateHeader(current, latest, colorized)}\\nRun \\`react-luau-doctor update --check\\` to see what's new.`;\r\n}\r\n\r\nfunction renderChangelogInline(\r\n value: string,\r\n colorized: boolean,\r\n ...baseCodes: string[]\r\n): string {\r\n if (!colorized) return value;\r\n\r\n const parts: string[] = [];\r\n let offset = 0;\r\n\r\n for (const match of value.matchAll(/`([^`\\n]+)`/g)) {\r\n const index = match.index ?? 0;\r\n\r\n if (index > offset)\r\n parts.push(whyPaint(true, value.slice(offset, index), ...baseCodes));\r\n\r\n parts.push(whyPaint(true, match[1], WHY_THEME.variable));\r\n offset = index + match[0].length;\r\n }\r\n\r\n if (parts.length === 0) return whyPaint(true, value, ...baseCodes);\r\n\r\n if (offset < value.length)\r\n parts.push(whyPaint(true, value.slice(offset), ...baseCodes));\r\n\r\n return parts.join(\"\");\r\n}\r\n\r\nfunction renderChangelogNotes(notes: string, colorized: boolean): string {\r\n return notes\r\n .split(/\\r?\\n/)\r\n .map((line) => {\r\n const heading = /^#{3,6}\\s+(.+)$/.exec(line.trim());\r\n\r\n if (heading)\r\n return renderChangelogInline(heading[1], colorized, WHY_ANSI.bold);\r\n\r\n const bullet = /^(\\s*)[-*]\\s+(.+)$/.exec(line);\r\n\r\n if (bullet)\r\n return `${bullet[1] || \" \"}• ${renderChangelogInline(bullet[2], colorized)}`;\r\n\r\n return renderChangelogInline(line, colorized);\r\n })\r\n .join(\"\\n\")\r\n .trim();\r\n}\r\n\r\nfunction renderUpdateCheck(\r\n current: string,\r\n latest: string,\r\n releases: ChangelogRelease[],\r\n releaseNotesUnavailable: boolean,\r\n colorized: boolean,\r\n): string {\r\n const lines = [\r\n renderUpdateHeader(current, latest, colorized),\r\n \"\",\r\n whyPaint(colorized, \"What's new\", WHY_ANSI.bold),\r\n ];\r\n\r\n if (releaseNotesUnavailable) {\r\n lines.push(\" Release notes could not be loaded from GitHub.\");\r\n } else if (releases.length === 0) {\r\n lines.push(\" No changelog entries were found between these versions.\");\r\n } else {\r\n for (const release of releases) {\r\n lines.push(\"\", whyPaint(colorized, `v${release.version}`, WHY_ANSI.bold));\r\n const notes = renderChangelogNotes(release.notes, colorized);\r\n\r\n if (notes) lines.push(notes);\r\n }\r\n }\r\n\r\n lines.push(\"\", \"Run `react-luau-doctor update` to update.\");\r\n\r\n return lines.join(\"\\n\");\r\n}\r\n\r\nasync function runUpdateCommand(argv: string[]): Promise<void> {\r\n if (argv.includes(\"--help\") || argv.includes(\"-h\")) {\r\n process.stdout.write(\"Usage: react-luau-doctor update [--check]\\n\");\r\n\r\n return;\r\n }\r\n\r\n if (argv.length > 1 || (argv.length === 1 && argv[0] !== \"--check\")) {\r\n throw new Error(\"Usage: react-luau-doctor update [--check]\");\r\n }\r\n\r\n const result = await checkForUpdatesNow(VERSION);\r\n\r\n if (!result.updateAvailable) {\r\n process.stdout.write(`React-Luau Doctor v${VERSION} is up to date.\\n`);\r\n\r\n return;\r\n }\r\n\r\n const colorized = shouldUseColor(false, false);\r\n\r\n if (argv[0] === \"--check\") {\r\n let releases: ChangelogRelease[] = [];\r\n let releaseNotesUnavailable = false;\r\n\r\n try {\r\n releases = await fetchChangelogReleases(VERSION, result.latest);\r\n } catch {\r\n releaseNotesUnavailable = true;\r\n }\r\n\r\n process.stdout.write(\r\n `${renderUpdateCheck(VERSION, result.latest, releases, releaseNotesUnavailable, colorized)}\\n`,\r\n );\r\n\r\n return;\r\n }\r\n\r\n const command = currentUpdateInstallCommand();\r\n\r\n if (!command) {\r\n throw new Error(\r\n `Could not determine the global package manager for this installation. Run \\`npm install -g ${packageJson.name}@latest\\` manually.`,\r\n );\r\n }\r\n\r\n const label = whyPaint(\r\n colorized,\r\n \"Updating React-Luau Doctor:\",\r\n WHY_ANSI.bold,\r\n WHY_ANSI.yellow,\r\n );\r\n\r\n const oldVersion = whyPaint(colorized, `v${VERSION}`, WHY_ANSI.dim);\r\n const newVersion = whyPaint(colorized, `v${result.latest}`, WHY_ANSI.bold);\r\n\r\n process.stdout.write(\r\n `${label} ${oldVersion} → ${newVersion}\\nUsing \\`${command.display}\\`\\n\\n`,\r\n );\r\n\r\n installLatestVersion(command);\r\n process.stdout.write(`\\nUpdated React-Luau Doctor to v${result.latest}.\\n`);\r\n}\r\n\r\nfunction splitLongOption(arg: string): { name: string; inlineValue?: string } {\r\n if (!arg.startsWith(\"--\")) return { name: arg };\r\n\r\n const equals = arg.indexOf(\"=\");\r\n\r\n if (equals < 0) return { name: arg };\r\n\r\n return { name: arg.slice(0, equals), inlineValue: arg.slice(equals + 1) };\r\n}\r\n\r\nfunction requiredValue(\r\n argv: string[],\r\n index: number,\r\n name: string,\r\n inlineValue?: string,\r\n): { value: string; nextIndex: number } {\r\n if (inlineValue !== undefined) {\r\n if (!inlineValue) throw new Error(`${name} requires a value`);\r\n\r\n return { value: inlineValue, nextIndex: index };\r\n }\r\n\r\n const value = argv[index + 1];\r\n\r\n if (!value || value.startsWith(\"-\"))\r\n throw new Error(`${name} requires a value`);\r\n\r\n return { value, nextIndex: index + 1 };\r\n}\r\n\r\nfunction shouldUseColor(noColor = false, machineReadable = false): boolean {\r\n return (\r\n !noColor &&\r\n !machineReadable &&\r\n process.env.NO_COLOR === undefined &&\r\n Boolean(process.stdout.isTTY)\r\n );\r\n}\r\n\r\nfunction whyTextWidth(): number {\r\n return Math.max(60, (process.stdout.columns ?? 120) - 2);\r\n}\r\n\r\nfunction parseBlocking(value: string, name: string): BlockingLevel {\r\n if (!BLOCKING.has(value as BlockingLevel))\r\n throw new Error(`${name} must be error, warning, or none`);\r\n\r\n return value as BlockingLevel;\r\n}\r\n\r\nfunction parseArgs(argv: string[]): CliOptions {\r\n const options: CliOptions = {\r\n target: \".\",\r\n debug: false,\r\n scoreOnly: false,\r\n json: false,\r\n jsonCompact: false,\r\n includeUntracked: false,\r\n categories: [],\r\n staged: false,\r\n annotations: false,\r\n noColor: false,\r\n noCache: false,\r\n noParallel: false,\r\n noUpdateCheck: false,\r\n help: false,\r\n version: false,\r\n };\r\n\r\n let sawTarget = false;\r\n\r\n for (let index = 0; index < argv.length; index += 1) {\r\n const raw = argv[index];\r\n const { name: arg, inlineValue } = splitLongOption(raw);\r\n\r\n if (arg === \"--verbose\") options.verbose = true;\r\n else if (arg === \"--debug\") options.debug = true;\r\n else if (arg === \"--score\") options.scoreOnly = true;\r\n else if (arg === \"--json\") options.json = true;\r\n else if (arg === \"--json-compact\") options.jsonCompact = true;\r\n else if (arg === \"--include-untracked\") options.includeUntracked = true;\r\n else if (arg === \"--no-score\") options.showScore = false;\r\n else if (arg === \"--staged\") options.staged = true;\r\n else if (arg === \"--no-respect-inline-disables\")\r\n options.respectInlineDisables = false;\r\n else if (arg === \"--respect-inline-disables\")\r\n options.respectInlineDisables = true;\r\n else if (arg === \"--warnings\") options.warnings = true;\r\n else if (arg === \"--no-warnings\") options.warnings = false;\r\n else if (arg === \"--no-color\") options.noColor = true;\r\n else if (arg === \"--no-cache\") options.noCache = true;\r\n else if (arg === \"--no-parallel\") options.noParallel = true;\r\n else if (arg === \"--no-update-check\") options.noUpdateCheck = true;\r\n else if (arg === \"--annotations\") options.annotations = true;\r\n else if (arg === \"--help\" || arg === \"-h\") options.help = true;\r\n else if (arg === \"--version\" || arg === \"-v\") options.version = true;\r\n else if (arg === \"--output-dir\") {\r\n const parsed = requiredValue(argv, index, arg, inlineValue);\r\n options.outputDir = parsed.value;\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--json-out\") {\r\n const parsed = requiredValue(argv, index, arg, inlineValue);\r\n options.jsonOut = parsed.value;\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--project\") {\r\n const parsed = requiredValue(argv, index, arg, inlineValue);\r\n options.project = parsed.value;\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--scope\") {\r\n const parsed = requiredValue(argv, index, arg, inlineValue);\r\n\r\n if (!SCOPES.has(parsed.value as ScanScope))\r\n throw new Error(\"--scope must be full, files, changed, or lines\");\r\n\r\n options.scope = parsed.value as ScanScope;\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--base\") {\r\n const parsed = requiredValue(argv, index, arg, inlineValue);\r\n options.base = parsed.value;\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--diff\") {\r\n if (inlineValue !== undefined)\r\n options.diff =\r\n inlineValue === \"false\"\r\n ? false\r\n : inlineValue === \"true\"\r\n ? true\r\n : inlineValue;\r\n else {\r\n const next = argv[index + 1];\r\n\r\n if (next && !next.startsWith(\"-\")) {\r\n options.diff =\r\n next === \"false\" ? false : next === \"true\" ? true : next;\r\n\r\n index += 1;\r\n } else options.diff = true;\r\n }\r\n } else if (arg === \"--changed-files-from\") {\r\n const parsed = requiredValue(argv, index, arg, inlineValue);\r\n options.changedFilesFrom = parsed.value;\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--category\") {\r\n const parsed = requiredValue(argv, index, arg, inlineValue);\r\n const category = normalizeCategory(parsed.value);\r\n\r\n if (!category) throw new Error(`Unknown category: ${parsed.value}`);\r\n\r\n options.categories.push(category);\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--max-duration\") {\r\n const parsed = requiredValue(argv, index, arg, inlineValue);\r\n const seconds = Number(parsed.value);\r\n\r\n if (!Number.isFinite(seconds) || seconds <= 0)\r\n throw new Error(\"--max-duration must be a positive number of seconds\");\r\n\r\n options.maxDurationSeconds = seconds;\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--blocking\") {\r\n const parsed = requiredValue(argv, index, arg, inlineValue);\r\n options.blocking = parseBlocking(parsed.value, arg);\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--min-severity\") {\r\n const parsed = requiredValue(argv, index, arg, inlineValue);\r\n\r\n if (!SEVERITIES.has(parsed.value as Severity))\r\n throw new Error(\"--min-severity must be suggestion, warning, or error\");\r\n\r\n options.minSeverity = parsed.value as Severity;\r\n index = parsed.nextIndex;\r\n } else if (arg.startsWith(\"-\")) {\r\n throw new Error(`Unknown option: ${raw}`);\r\n } else if (!sawTarget) {\r\n options.target = raw;\r\n sawTarget = true;\r\n } else {\r\n throw new Error(`Unexpected argument: ${raw}`);\r\n }\r\n }\r\n\r\n return options;\r\n}\r\n\r\nfunction resolveScope(\r\n options: CliOptions,\r\n config: DoctorConfig,\r\n): { scope: ScanScope; base?: string } {\r\n if (options.scope)\r\n return { scope: options.scope, base: options.base ?? config.base };\r\n\r\n if (options.diff !== undefined) {\r\n if (options.diff === false)\r\n return { scope: \"full\", base: options.base ?? config.base };\r\n\r\n return {\r\n scope: \"changed\",\r\n\r\n base:\r\n options.base ??\r\n (typeof options.diff === \"string\" ? options.diff : config.base),\r\n };\r\n }\r\n\r\n if (config.scope)\r\n return { scope: config.scope, base: options.base ?? config.base };\r\n\r\n if (config.diff !== undefined) {\r\n if (config.diff === false)\r\n return { scope: \"full\", base: options.base ?? config.base };\r\n\r\n return {\r\n scope: \"changed\",\r\n\r\n base:\r\n options.base ??\r\n (typeof config.diff === \"string\" ? config.diff : config.base),\r\n };\r\n }\r\n\r\n if (options.changedFilesFrom)\r\n return { scope: \"files\", base: options.base ?? config.base };\r\n\r\n return { scope: \"full\", base: options.base ?? config.base };\r\n}\r\n\r\nfunction validateModeFlags(options: CliOptions, scope: ScanScope): void {\r\n if (options.scope && options.diff !== undefined && options.diff !== false)\r\n throw new Error(\"Cannot combine --scope and --diff. Pick one mode\");\r\n\r\n if (options.staged && options.diff !== undefined && options.diff !== false)\r\n throw new Error(\"Cannot combine --staged and --diff. Pick one mode\");\r\n\r\n if (options.staged && (scope === \"full\" || scope === \"changed\")) {\r\n throw new Error(\r\n `Cannot combine --staged with --scope ${scope}. Use --scope files or --scope lines, or omit --scope`,\r\n );\r\n }\r\n\r\n if (options.includeUntracked && options.staged)\r\n throw new Error(\r\n \"Cannot combine --include-untracked with --staged. The git index never holds untracked files\",\r\n );\r\n\r\n if (options.includeUntracked && scope === \"full\")\r\n throw new Error(\r\n \"--include-untracked requires files, changed, or lines scope\",\r\n );\r\n\r\n if (options.scoreOnly && options.json)\r\n throw new Error(\"Cannot combine --score and --json. Pick one output mode\");\r\n\r\n if (options.scoreOnly && options.showScore === false)\r\n throw new Error(\"Cannot combine --score with --no-score\");\r\n\r\n if (options.annotations && (options.json || options.scoreOnly))\r\n throw new Error(\"--annotations cannot be combined with --json or --score\");\r\n}\r\n\r\nfunction findProjectByName(root: string, name: string): string | null {\r\n const direct = path.resolve(root, name);\r\n\r\n if (fs.existsSync(direct) && fs.statSync(direct).isDirectory()) return direct;\r\n\r\n const ignored = new Set([\r\n \".git\",\r\n \"node_modules\",\r\n \"Packages\",\r\n \"DevPackages\",\r\n \"ServerPackages\",\r\n \"dist\",\r\n \"vendor\",\r\n ]);\r\n\r\n const queue: Array<{ directory: string; depth: number }> = [\r\n { directory: root, depth: 0 },\r\n ];\r\n\r\n const matches: string[] = [];\r\n\r\n while (queue.length > 0) {\r\n const current = queue.shift()!;\r\n\r\n if (current.depth >= 3) continue;\r\n\r\n for (const entry of fs.readdirSync(current.directory, {\r\n withFileTypes: true,\r\n })) {\r\n if (!entry.isDirectory() || ignored.has(entry.name)) continue;\r\n\r\n const absolute = path.join(current.directory, entry.name);\r\n\r\n if (entry.name === name) matches.push(absolute);\r\n\r\n queue.push({ directory: absolute, depth: current.depth + 1 });\r\n }\r\n }\r\n\r\n if (matches.length > 1)\r\n throw new Error(\r\n `Project selector \"${name}\" is ambiguous: ${matches.map((match) => path.relative(root, match)).join(\", \")}`,\r\n );\r\n\r\n return matches[0] ?? null;\r\n}\r\n\r\nfunction resolveProjectRoots(\r\n root: string,\r\n projectFlag: string | undefined,\r\n config: DoctorConfig,\r\n): string[] {\r\n const requested = projectFlag\r\n ? projectFlag\r\n .split(\",\")\r\n .map((value) => value.trim())\r\n .filter(Boolean)\r\n : (config.projects ?? []);\r\n\r\n if (requested.length === 0) return [root];\r\n\r\n return [\r\n ...new Set(\r\n requested.map((project) => {\r\n const resolved = findProjectByName(root, project);\r\n\r\n if (!resolved) throw new Error(`Could not find project: ${project}`);\r\n\r\n return resolved;\r\n }),\r\n ),\r\n ];\r\n}\r\n\r\nfunction serializeReport(report: ScanReport, compact: boolean): string {\r\n return compact ? JSON.stringify(report) : JSON.stringify(report, null, 2);\r\n}\r\n\r\nfunction writeJsonFile(\r\n filename: string,\r\n value: unknown,\r\n compact = false,\r\n): void {\r\n fs.mkdirSync(path.dirname(filename), { recursive: true });\r\n\r\n fs.writeFileSync(\r\n filename,\r\n `${compact ? JSON.stringify(value) : JSON.stringify(value, null, 2)}\\n`,\r\n );\r\n}\r\n\r\nfunction writeDiagnosticsDump(directory: string, report: ScanReport): void {\r\n fs.mkdirSync(directory, { recursive: true });\r\n writeJsonFile(path.join(directory, \"report.json\"), report);\r\n writeJsonFile(path.join(directory, \"diagnostics.json\"), report.diagnostics);\r\n\r\n writeJsonFile(path.join(directory, \"summary.json\"), {\r\n schemaVersion: report.schemaVersion,\r\n root: report.root,\r\n scope: report.scope ?? \"full\",\r\n base: report.base ?? null,\r\n scannedFiles: report.scannedFiles,\r\n candidateFiles: report.candidateFiles,\r\n partial: report.partial,\r\n skippedFiles: report.skippedFiles ?? [],\r\n durationMs: report.durationMs,\r\n score: report.score,\r\n counts: report.counts,\r\n });\r\n}\r\n\r\nfunction shouldBlock(report: ScanReport, level: BlockingLevel): boolean {\r\n if (level === \"none\") return false;\r\n\r\n if (level === \"warning\")\r\n return report.counts.error > 0 || report.counts.warning > 0;\r\n\r\n return report.counts.error > 0;\r\n}\r\n\r\nfunction findRule(requested: string): RuleDefinition {\r\n const rule = rules.find(\r\n (candidate) =>\r\n candidate.id === requested || candidate.id.endsWith(`/${requested}`),\r\n );\r\n\r\n if (!rule) throw new Error(`Unknown rule: ${requested}`);\r\n\r\n return rule;\r\n}\r\n\r\nfunction parseCommandCwd(argv: string[]): { cwd: string; remaining: string[] } {\r\n let cwd = process.cwd();\r\n const remaining: string[] = [];\r\n\r\n for (let index = 0; index < argv.length; index += 1) {\r\n const arg = argv[index];\r\n\r\n if (arg === \"-c\" || arg === \"--cwd\") {\r\n const value = argv[++index];\r\n\r\n if (!value) throw new Error(`${arg} requires a path`);\r\n\r\n cwd = path.resolve(value);\r\n } else remaining.push(arg);\r\n }\r\n\r\n return { cwd, remaining };\r\n}\r\n\r\nfunction ruleSeverityMap(config: DoctorConfig): Map<string, string> {\r\n return new Map(\r\n rules.map((rule) => [\r\n rule.id,\r\n effectiveSeverity(rule.severity, rule.id, config) ?? \"off\",\r\n ]),\r\n );\r\n}\r\n\r\nfunction runRulesCommand(argv: string[]): void {\r\n const noColor = argv.includes(\"--no-color\");\r\n const cleaned = argv.filter((arg) => arg !== \"--no-color\");\r\n const action = cleaned[0] ?? \"list\";\r\n const { cwd, remaining } = parseCommandCwd(cleaned.slice(1));\r\n const loaded = loadConfigWithSource(cwd);\r\n const config = loaded.config;\r\n\r\n if (action === \"list\") {\r\n let category: Category | null = null;\r\n let configured = false;\r\n let json = false;\r\n\r\n for (let index = 0; index < remaining.length; index += 1) {\r\n const arg = remaining[index];\r\n\r\n if (arg === \"--configured\") configured = true;\r\n else if (arg === \"--json\") json = true;\r\n else if (arg === \"--category\") {\r\n const value = remaining[++index];\r\n\r\n if (!value) throw new Error(\"rules list --category requires a name\");\r\n\r\n category = normalizeCategory(value);\r\n\r\n if (!category) throw new Error(`Unknown category: ${value}`);\r\n } else throw new Error(`Unknown rules list option: ${arg}`);\r\n }\r\n\r\n const severityMap = ruleSeverityMap(config);\r\n\r\n const filtered = rules.filter((rule) => {\r\n if (category && rule.category !== category) return false;\r\n\r\n if (configured && config.rules?.[rule.id] === undefined) return false;\r\n\r\n return true;\r\n });\r\n\r\n if (json) {\r\n process.stdout.write(\r\n `${JSON.stringify(\r\n filtered.map((rule) => ({\r\n id: rule.id,\r\n severity: severityMap.get(rule.id),\r\n defaultSeverity: rule.severity,\r\n category: rule.category,\r\n description: rule.description,\r\n })),\r\n null,\r\n 2,\r\n )}\\n`,\r\n );\r\n } else\r\n process.stdout.write(\r\n `${renderRulesList(filtered, process.stdout.columns ?? 120, severityMap, shouldUseColor(noColor))}\\n`,\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (action === \"explain\") {\r\n const requested = remaining[0];\r\n\r\n if (!requested) throw new Error(\"rules explain requires a rule id\");\r\n\r\n const json = remaining.slice(1).includes(\"--json\");\r\n const extra = remaining.slice(1).filter((arg) => arg !== \"--json\");\r\n\r\n if (extra.length > 0)\r\n throw new Error(`Unknown rules explain option: ${extra[0]}`);\r\n\r\n const rule = findRule(requested);\r\n\r\n const currentSeverity =\r\n effectiveSeverity(rule.severity, rule.id, config) ?? \"off\";\r\n\r\n const result = {\r\n id: rule.id,\r\n severity: currentSeverity,\r\n defaultSeverity: rule.severity,\r\n category: rule.category,\r\n description: rule.description,\r\n example: rule.guidance?.example,\r\n };\r\n\r\n if (json) process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\r\n else {\r\n const colorized = shouldUseColor(noColor);\r\n const width = whyTextWidth();\r\n\r\n const lines = [\r\n whyPaint(colorized, rule.id, WHY_ANSI.bold, WHY_ANSI.magenta),\r\n `${rule.category} | Severity: ${currentSeverity} | Default: ${rule.severity}`,\r\n \"\",\r\n whySectionTitle(colorized, \"What this checks\"),\r\n ...wrapWhyWords(rule.description, width),\r\n ];\r\n\r\n if (\r\n rule.guidance?.explanation &&\r\n rule.guidance.explanation !== rule.description\r\n ) {\r\n lines.push(\"\", ...wrapWhyWords(rule.guidance.explanation, width));\r\n }\r\n\r\n if (rule.guidance?.help) {\r\n lines.push(\r\n \"\",\r\n whySectionTitle(colorized, \"How to fix\"),\r\n ...wrapWhyWords(rule.guidance.help, width),\r\n );\r\n }\r\n\r\n if (result.example) {\r\n lines.push(\r\n \"\",\r\n whySectionTitle(colorized, \"Example fix\"),\r\n ...renderWhyFixPreview(result.example, colorized, width),\r\n );\r\n }\r\n\r\n lines.push(\r\n \"\",\r\n ...wrapWhyWords(\r\n \"This is an example pattern, not an automatic edit. To explain a finding in your code, run:\",\r\n width,\r\n ),\r\n \" react-luau-doctor why <file:line>\",\r\n );\r\n\r\n process.stdout.write(`${lines.join(\"\\n\")}\\n`);\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (action === \"set\") {\r\n const requested = remaining[0];\r\n const rawSeverity = remaining[1];\r\n\r\n if (!requested || !rawSeverity)\r\n throw new Error(\"rules set requires <rule> <severity>\");\r\n\r\n const rule = findRule(requested);\r\n const severity = normalizeRuleSetting(rawSeverity);\r\n\r\n if (!severity)\r\n throw new Error(\r\n \"Rule severity must be off, suggestion, warning/warn, or error\",\r\n );\r\n\r\n const filename = writeConfig(cwd, (current) => ({\r\n ...current,\r\n rules: { ...current.rules, [rule.id]: severity },\r\n }));\r\n\r\n process.stdout.write(\r\n `Set ${rule.id} to ${severity} in ${path.relative(cwd, filename)}\\n`,\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (action === \"enable\") {\r\n const requested = remaining[0];\r\n\r\n if (!requested) throw new Error(\"rules enable requires a rule id\");\r\n\r\n const rule = findRule(requested);\r\n let severity: Severity = rule.severity;\r\n const severityIndex = remaining.indexOf(\"--severity\");\r\n\r\n if (severityIndex >= 0) {\r\n const value = remaining[severityIndex + 1];\r\n const normalized = value ? normalizeRuleSetting(value) : null;\r\n\r\n if (!normalized || normalized === \"off\")\r\n throw new Error(\r\n \"--severity must be suggestion, warning/warn, or error\",\r\n );\r\n\r\n severity = normalized;\r\n }\r\n\r\n const filename = writeConfig(cwd, (current) => ({\r\n ...current,\r\n rules: { ...current.rules, [rule.id]: severity },\r\n }));\r\n\r\n process.stdout.write(\r\n `Enabled ${rule.id} at ${severity} in ${path.relative(cwd, filename)}\\n`,\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (action === \"disable\") {\r\n const requested = remaining[0];\r\n\r\n if (!requested) throw new Error(\"rules disable requires a rule id\");\r\n\r\n const rule = findRule(requested);\r\n\r\n const filename = writeConfig(cwd, (current) => ({\r\n ...current,\r\n rules: { ...current.rules, [rule.id]: \"off\" },\r\n }));\r\n\r\n process.stdout.write(\r\n `Disabled ${rule.id} in ${path.relative(cwd, filename)}\\n`,\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (action === \"category\") {\r\n const rawCategory = remaining[0];\r\n const rawSeverity = remaining[1];\r\n\r\n if (!rawCategory || !rawSeverity)\r\n throw new Error(\"rules category requires <category> <severity>\");\r\n\r\n const category = normalizeCategory(rawCategory);\r\n const severity = normalizeRuleSetting(rawSeverity);\r\n\r\n if (!category) throw new Error(`Unknown category: ${rawCategory}`);\r\n\r\n if (!severity)\r\n throw new Error(\r\n \"Category severity must be off, suggestion, warning/warn, or error\",\r\n );\r\n\r\n const categoryRules = rules.filter((rule) => rule.category === category);\r\n\r\n const filename = writeConfig(cwd, (current) => ({\r\n ...current,\r\n\r\n rules: Object.fromEntries([\r\n ...Object.entries(current.rules ?? {}),\r\n ...categoryRules.map((rule) => [rule.id, severity] as const),\r\n ]),\r\n }));\r\n\r\n process.stdout.write(\r\n `Set ${categoryRules.length} ${category} rules to ${severity} in ${path.relative(cwd, filename)}\\n`,\r\n );\r\n\r\n return;\r\n }\r\n\r\n throw new Error(`Unknown rules command: ${action}`);\r\n}\r\n\r\nfunction whyLocationContains(\r\n location: Diagnostic[\"location\"],\r\n line: number,\r\n column?: number,\r\n): boolean {\r\n if (line < location.line || line > location.endLine) return false;\r\n\r\n if (column === undefined) return true;\r\n\r\n if (location.line === location.endLine)\r\n return column >= location.column && column <= location.endColumn;\r\n\r\n if (line === location.line) return column >= location.column;\r\n\r\n if (line === location.endLine) return column <= location.endColumn;\r\n\r\n return true;\r\n}\r\n\r\nfunction whyLocationMatches(\r\n diagnostic: Diagnostic,\r\n line: number,\r\n column?: number,\r\n): boolean {\r\n if (whyLocationContains(diagnostic.location, line, column)) return true;\r\n\r\n return (diagnostic.highlights ?? []).some((location) =>\r\n whyLocationContains(location, line, column),\r\n );\r\n}\r\n\r\nasync function scanWhyFile(\r\n filename: string,\r\n cwd: string,\r\n cache: boolean,\r\n onProgress?: (progress: ScanProgress) => void,\r\n): Promise<ScanReport> {\r\n // Scan only the requested file, but build its project model from the same root\r\n // as a normal project scan. Project-aware rules otherwise disappear when `why`\r\n // is invoked on a single file. Suppressions are evaluated after this one audit\r\n // scan so `why` never rebuilds project context just to discover hidden findings.\r\n return scanPath(cwd, {\r\n files: [{ absolutePath: filename, forceScan: true }],\r\n respectInlineDisables: false,\r\n onProgress,\r\n cache,\r\n });\r\n}\r\n\r\nasync function runWhy(\r\n location: string,\r\n cwd: string,\r\n noColor = false,\r\n cache = true,\r\n onProgress?: (progress: ScanProgress) => void,\r\n beforeOutput?: () => void,\r\n): Promise<void> {\r\n const match = location.match(/^(.*):(\\d+)(?::(\\d+))?$/);\r\n\r\n if (!match) throw new Error(\"Location must be file:line or file:line:column\");\r\n\r\n const filename = path.resolve(cwd, match[1]);\r\n const line = Number(match[2]);\r\n const column = match[3] === undefined ? undefined : Number(match[3]);\r\n\r\n if (!fs.existsSync(filename))\r\n throw new Error(`File does not exist: ${match[1]}`);\r\n\r\n const colorized = shouldUseColor(noColor, false);\r\n const source = fs.readFileSync(filename, \"utf8\");\r\n const isSuppressed = createInlineSuppressionChecker(source);\r\n const auditReport = await scanWhyFile(filename, cwd, cache, onProgress);\r\n // `why` renders its own output before returning to the CLI entry point. Clear\r\n // the transient progress line here so the diagnostic never starts on the same\r\n // terminal row as a completed progress bar.\r\n beforeOutput?.();\r\n\r\n const matching = auditReport.diagnostics.filter((diagnostic) =>\r\n whyLocationMatches(diagnostic, line, column),\r\n );\r\n\r\n const visible = matching.filter(\r\n (diagnostic) => !isSuppressed(diagnostic.rule, diagnostic.location.line),\r\n );\r\n\r\n if (visible.length > 0) {\r\n for (let index = 0; index < visible.length; index += 1) {\r\n if (index > 0) process.stdout.write(\"\\n\");\r\n\r\n process.stdout.write(\r\n renderWhyDiagnostic(source, visible[index], colorized, whyTextWidth()),\r\n );\r\n }\r\n\r\n return;\r\n }\r\n\r\n const suppressed = matching.filter((diagnostic) =>\r\n isSuppressed(diagnostic.rule, diagnostic.location.line),\r\n );\r\n\r\n if (suppressed.length > 0) {\r\n process.stdout.write(\r\n `No visible diagnostic at ${location}. ${suppressed.length} diagnostic${suppressed.length === 1 ? \" is\" : \"s are\"} hidden by an inline react-luau-doctor suppression.\\n\\n`,\r\n );\r\n\r\n for (let index = 0; index < suppressed.length; index += 1) {\r\n if (index > 0) process.stdout.write(\"\\n\");\r\n\r\n process.stdout.write(\r\n renderWhyDiagnostic(source, suppressed[index], colorized, whyTextWidth()),\r\n );\r\n }\r\n\r\n return;\r\n }\r\n\r\n const nearby = auditReport.diagnostics\r\n .filter(\r\n (diagnostic) => !isSuppressed(diagnostic.rule, diagnostic.location.line),\r\n )\r\n .filter((diagnostic) => Math.abs(diagnostic.location.line - line) <= 3)\r\n .sort(\r\n (a, b) =>\r\n Math.abs(a.location.line - line) - Math.abs(b.location.line - line),\r\n );\r\n\r\n process.stdout.write(\r\n `No React-Luau Doctor diagnostic found at ${location}.\\n`,\r\n );\r\n\r\n if (nearby.length > 0) {\r\n process.stdout.write(\"Nearby diagnostics in this file:\\n\");\r\n\r\n for (const diagnostic of nearby.slice(0, 5)) {\r\n process.stdout.write(\r\n ` ${diagnostic.file}:${diagnostic.location.line}:${diagnostic.location.column} ${diagnostic.rule}\\n`,\r\n );\r\n }\r\n }\r\n}\r\n\r\nfunction pathIsInside(parent: string, child: string): boolean {\r\n const relative = path.relative(parent, child);\r\n\r\n return (\r\n relative === \"\" ||\r\n (!relative.startsWith(\"..\") && !path.isAbsolute(relative))\r\n );\r\n}\r\n\r\nasync function runScan(\r\n options: CliOptions,\r\n onProgress?: (progress: ScanProgress) => void,\r\n): Promise<ScanReport> {\r\n const commandRoot = process.cwd();\r\n const target = path.resolve(commandRoot, options.target);\r\n\r\n if (!fs.existsSync(target))\r\n throw new Error(`Scan path does not exist: ${options.target}`);\r\n\r\n const targetStat = fs.statSync(target);\r\n const scanRoot = targetStat.isFile() ? path.dirname(target) : target;\r\n\r\n // CLI configuration is owned by the directory the command was launched from.\r\n // Narrowing the scan target must not silently switch to a different config.\r\n const loaded = loadConfigWithSource(commandRoot);\r\n const config = loaded.config;\r\n const resolvedScope = resolveScope(options, config);\r\n\r\n const scope =\r\n options.staged && options.scope === undefined\r\n ? \"files\"\r\n : resolvedScope.scope;\r\n\r\n validateModeFlags(options, scope);\r\n\r\n if (\r\n targetStat.isFile() &&\r\n (scope !== \"full\" || options.staged || options.changedFilesFrom)\r\n ) {\r\n throw new Error(\r\n \"Git scopes require a directory target. Scan the containing project directory instead\",\r\n );\r\n }\r\n\r\n const targetInsideCommandRoot = pathIsInside(commandRoot, target);\r\n const selectionRoot = targetInsideCommandRoot ? commandRoot : scanRoot;\r\n\r\n const requestedProjectRoots = resolveProjectRoots(\r\n selectionRoot,\r\n options.project,\r\n config,\r\n );\r\n\r\n const projectTargets = requestedProjectRoots.flatMap((projectRoot) => {\r\n if (pathIsInside(projectRoot, target))\r\n return [{ projectRoot, targetRoot: target }];\r\n\r\n if (pathIsInside(target, projectRoot))\r\n return [{ projectRoot, targetRoot: projectRoot }];\r\n\r\n return [];\r\n });\r\n\r\n if (projectTargets.length === 0) {\r\n throw new Error(\r\n `Scan target is outside the selected project${requestedProjectRoots.length === 1 ? \"\" : \"s\"}: ${options.target}`,\r\n );\r\n }\r\n\r\n const displayRoot = targetInsideCommandRoot ? commandRoot : selectionRoot;\r\n\r\n const minSeverity =\r\n (options.warnings ?? config.warnings ?? true)\r\n ? (options.minSeverity ?? \"suggestion\")\r\n : \"error\";\r\n\r\n const categories =\r\n options.categories.length > 0 ? options.categories : config.categories;\r\n\r\n const respectInlineDisables =\r\n options.respectInlineDisables ?? config.respectInlineDisables ?? true;\r\n\r\n const deadlineAt =\r\n options.maxDurationSeconds !== undefined\r\n ? performance.now() + options.maxDurationSeconds * 1000\r\n : undefined;\r\n\r\n const reports: Array<{ projectRoot: string; report: ScanReport }> = [];\r\n\r\n for (const { projectRoot, targetRoot } of projectTargets) {\r\n let report: ScanReport;\r\n\r\n const projectName =\r\n projectTargets.length > 1\r\n ? path.relative(displayRoot, projectRoot) || \".\"\r\n : undefined;\r\n\r\n const projectProgress = onProgress\r\n ? (progress: ScanProgress) =>\r\n onProgress({\r\n ...progress,\r\n\r\n phase:\r\n [projectName, progress.phase].filter(Boolean).join(\":\") ||\r\n undefined,\r\n\r\n label:\r\n projectName && progress.label\r\n ? `${projectName}: ${progress.label}`\r\n : progress.label,\r\n })\r\n : undefined;\r\n\r\n if (targetStat.isFile()) {\r\n report = await scanPath(targetRoot, {\r\n projectRoot,\r\n config,\r\n minSeverity,\r\n categories,\r\n respectInlineDisables,\r\n deadlineAt,\r\n onProgress: projectProgress,\r\n cache: !options.noCache,\r\n parallel: !options.noParallel,\r\n });\r\n\r\n report.scope = \"full\";\r\n } else {\r\n report = await scanProjectWithScope(projectRoot, {\r\n targetRoot,\r\n scope,\r\n base: resolvedScope.base,\r\n includeUntracked: options.includeUntracked,\r\n staged: options.staged,\r\n changedFilesFrom: options.changedFilesFrom,\r\n config,\r\n minSeverity,\r\n categories,\r\n respectInlineDisables,\r\n deadlineAt,\r\n onProgress: projectProgress,\r\n cache: !options.noCache,\r\n parallel: !options.noParallel,\r\n });\r\n }\r\n\r\n reports.push({ projectRoot, report });\r\n }\r\n\r\n const report = aggregateReports(displayRoot, reports);\r\n\r\n if (options.debug) {\r\n const debugLines = [\r\n `[debug] version=${VERSION}`,\r\n `[debug] bun=${Bun.version} platform=${process.platform}/${process.arch}`,\r\n `[debug] target=${target}`,\r\n `[debug] config=${loaded.filename ?? \"none\"}`,\r\n `[debug] scope=${report.scope ?? scope} base=${report.base ?? resolvedScope.base ?? \"auto\"}`,\r\n `[debug] projects=${projectTargets.map(({ projectRoot }) => path.relative(displayRoot, projectRoot) || \".\").join(\",\")}`,\r\n `[debug] candidates=${report.candidateFiles ?? 0} scanned=${report.scannedFiles} partial=${Boolean(report.partial)}`,\r\n `[debug] parallel=${!options.noParallel}`,\r\n ];\r\n\r\n process.stderr.write(`${debugLines.join(\"\\n\")}\\n`);\r\n }\r\n\r\n return report;\r\n}\r\n\r\nasync function main(): Promise<void> {\r\n try {\r\n const argv = process.argv.slice(2);\r\n\r\n if (argv[0] === \"__update-cache\") {\r\n await refreshUpdateCache({ silent: true });\r\n\r\n return;\r\n }\r\n\r\n if (argv[0] === \"update\") {\r\n await runUpdateCommand(argv.slice(1));\r\n\r\n return;\r\n }\r\n\r\n if (argv[0] === \"ci\") {\r\n await runCiCommand(argv.slice(1));\r\n\r\n return;\r\n }\r\n\r\n if (argv[0] === \"rules\") {\r\n runRulesCommand(argv.slice(1));\r\n\r\n return;\r\n }\r\n\r\n if (argv[0] === \"why\") {\r\n const location = argv[1];\r\n\r\n if (!location) throw new Error(\"why requires file:line\");\r\n\r\n const { cwd, remaining } = parseCommandCwd(argv.slice(2));\r\n const noColor = remaining.includes(\"--no-color\");\r\n const noCache = remaining.includes(\"--no-cache\");\r\n\r\n const unknown = remaining.filter(\r\n (arg) => arg !== \"--no-color\" && arg !== \"--no-cache\",\r\n );\r\n\r\n if (unknown.length > 0)\r\n throw new Error(`Unknown why option: ${unknown[0]}`);\r\n\r\n const colorized = shouldUseColor(noColor, false);\r\n\r\n const progress = createProgressRenderer({\r\n enabled: Boolean(process.stdout.isTTY && !process.env.CI),\r\n colorized,\r\n });\r\n\r\n try {\r\n await runWhy(\r\n location,\r\n cwd,\r\n noColor,\r\n !noCache,\r\n (scanProgress) => progress.update(scanProgress),\r\n () => progress.clear(),\r\n );\r\n } finally {\r\n progress.clear();\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (argv[0] === \"version\") {\r\n process.stdout.write(\r\n `React-Luau Doctor ${VERSION}\\nBun ${Bun.version}\\n${process.platform} ${process.arch}\\n${os.release()}\\n`,\r\n );\r\n\r\n return;\r\n }\r\n\r\n const options = parseArgs(argv);\r\n\r\n if (options.help) {\r\n process.stdout.write(usage());\r\n\r\n return;\r\n }\r\n\r\n if (options.version) {\r\n process.stdout.write(`${VERSION}\\n`);\r\n\r\n return;\r\n }\r\n\r\n const machineReadable =\r\n options.scoreOnly || options.json || options.annotations;\r\n\r\n const colorized = shouldUseColor(options.noColor, machineReadable);\r\n\r\n const updateNoticeEnabled = automaticUpdateNoticeEnabled(\r\n options,\r\n machineReadable,\r\n );\r\n\r\n if (updateNoticeEnabled) startBackgroundUpdateRefresh();\r\n\r\n const progress = createProgressRenderer({\r\n enabled: Boolean(\r\n process.stdout.isTTY && !process.env.CI && !machineReadable,\r\n ),\r\n\r\n colorized,\r\n });\r\n\r\n let report: ScanReport;\r\n\r\n try {\r\n report = await runScan(options, (scanProgress) =>\r\n progress.update(scanProgress),\r\n );\r\n } finally {\r\n progress.clear();\r\n }\r\n\r\n const compactJson = options.jsonCompact;\r\n const json = `${serializeReport(report, compactJson)}\\n`;\r\n\r\n if (options.jsonOut) {\r\n const outputPath = path.resolve(process.cwd(), options.jsonOut);\r\n fs.mkdirSync(path.dirname(outputPath), { recursive: true });\r\n fs.writeFileSync(outputPath, json);\r\n }\r\n\r\n if (options.outputDir)\r\n writeDiagnosticsDump(\r\n path.resolve(process.cwd(), options.outputDir),\r\n report,\r\n );\r\n\r\n const config = loadConfigWithSource(process.cwd()).config;\r\n const showScore = options.showScore ?? true;\r\n const verbose = options.verbose ?? config.verbose ?? false;\r\n\r\n if (options.scoreOnly) process.stdout.write(`${report.score}\\n`);\r\n else if (options.json) process.stdout.write(json);\r\n else if (options.annotations) {\r\n const annotations = renderAnnotations(report);\r\n\r\n if (annotations) process.stdout.write(`${annotations}\\n`);\r\n } else\r\n process.stdout.write(\r\n `${renderTextReport(report, showScore, colorized, verbose, process.stdout.columns ?? 120)}\\n`,\r\n );\r\n\r\n if (updateNoticeEnabled) {\r\n const update = getCachedUpdateNotice(VERSION);\r\n\r\n if (update)\r\n process.stdout.write(\r\n `\\n${renderUpdateNotice(update.current, update.latest, colorized)}\\n`,\r\n );\r\n }\r\n\r\n const blocking = options.blocking ?? config.blocking ?? \"error\";\r\n\r\n if (shouldBlock(report, blocking)) process.exitCode = 1;\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error);\r\n process.stderr.write(`react-luau-doctor: ${message}\\n`);\r\n process.exitCode = 2;\r\n }\r\n}\r\n\r\nvoid main();\r\n",
6
6
  "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { rulesById } from \"./rules\";\n\nimport type {\n BlockingLevel,\n Category,\n DoctorConfig,\n RuleSetting,\n ScanScope,\n Severity,\n} from \"./types\";\n\nexport const CONFIG_NAME = \"react-luau-doctor.config.json\";\n\nconst SEVERITIES = new Set<RuleSetting>([\n \"off\",\n \"error\",\n \"warning\",\n \"suggestion\",\n]);\n\nconst SCOPES = new Set<ScanScope>([\"full\", \"files\", \"changed\", \"lines\"]);\nconst BLOCKING_LEVELS = new Set<BlockingLevel>([\"error\", \"warning\", \"none\"]);\n\nconst CATEGORIES = new Set<Category>([\n \"Correctness\",\n \"Hooks\",\n \"Effects\",\n \"Performance\",\n \"Roblox\",\n \"Architecture\",\n]);\n\nexport function configSchema() {\n const strings = { type: \"array\", items: { type: \"string\" } };\n\n return {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n title: \"React-Luau Doctor project config\",\n type: \"object\",\n additionalProperties: false,\n\n properties: {\n $schema: {\n type: \"string\",\n description: \"JSON schema used by your editor\",\n },\n\n include: {\n ...strings,\n description: \"File globs to include in project scans\",\n },\n\n ignore: {\n ...strings,\n description: \"File globs and directories to exclude from project scans\",\n },\n\n projects: { ...strings, description: \"Project directories to scan\" },\n\n rules: {\n type: \"object\",\n description: \"Override a rule severity or turn it off for this project\",\n additionalProperties: false,\n\n properties: Object.fromEntries(\n [...rulesById.values()].map((rule) => [\n rule.id,\n {\n type: \"string\",\n enum: [...SEVERITIES],\n default: rule.severity,\n description: rule.description.replace(/\\.$/, \"\"),\n },\n ]),\n ),\n },\n\n categories: {\n type: \"array\",\n items: { type: \"string\", enum: [...CATEGORIES] },\n description: \"Limit findings to these categories\",\n },\n\n scope: {\n type: \"string\",\n enum: [...SCOPES],\n description: \"Choose which files or changed lines to report\",\n },\n\n diff: {\n type: [\"boolean\", \"string\"],\n\n description:\n \"Report introduced findings against HEAD or a specific Git ref\",\n },\n\n base: {\n type: \"string\",\n description: \"Git ref used as the baseline for changed scope\",\n },\n\n verbose: {\n type: \"boolean\",\n description: \"Include detailed findings in CLI output\",\n },\n\n blocking: {\n type: \"string\",\n enum: [...BLOCKING_LEVELS],\n description: \"Minimum severity that fails the CLI exit gate\",\n },\n\n warnings: {\n type: \"boolean\",\n description: \"Include warning findings in CLI output\",\n },\n\n respectInlineDisables: {\n type: \"boolean\",\n description: \"Honor inline suppression comments\",\n },\n },\n };\n}\n\nexport interface LoadedConfig {\n config: DoctorConfig;\n filename: string | null;\n}\n\nexport function loadConfigWithSource(root: string): LoadedConfig {\n const candidate = path.join(root, CONFIG_NAME);\n\n if (!fs.existsSync(candidate)) return { config: {}, filename: null };\n\n const parsed = JSON.parse(fs.readFileSync(candidate, \"utf8\")) as DoctorConfig;\n validateConfig(parsed, candidate);\n\n return { config: parsed, filename: candidate };\n}\n\nexport function loadConfig(root: string): DoctorConfig {\n return loadConfigWithSource(root).config;\n}\n\nexport function validateKnownRules(config: DoctorConfig): void {\n for (const ruleId of Object.keys(config.rules ?? {})) {\n if (!rulesById.has(ruleId))\n throw new Error(`Unknown configured rule: ${ruleId}`);\n }\n}\n\nfunction validateStringArray(\n value: unknown,\n field: string,\n filename: string,\n): void {\n if (\n !Array.isArray(value) ||\n value.some((entry) => typeof entry !== \"string\")\n ) {\n throw new Error(`${filename}: ${field} must be an array of strings`);\n }\n}\n\nfunction validateConfig(config: DoctorConfig, filename: string): void {\n if (config.include !== undefined)\n validateStringArray(config.include, \"include\", filename);\n\n if (config.ignore !== undefined)\n validateStringArray(config.ignore, \"ignore\", filename);\n\n if (config.projects !== undefined)\n validateStringArray(config.projects, \"projects\", filename);\n\n if (config.categories !== undefined) {\n if (\n !Array.isArray(config.categories) ||\n config.categories.some((category) => !CATEGORIES.has(category))\n ) {\n throw new Error(\n `${filename}: categories must contain valid React-Luau Doctor categories`,\n );\n }\n }\n\n if (config.rules) {\n for (const [rule, value] of Object.entries(config.rules)) {\n if (!SEVERITIES.has(value))\n throw new Error(\n `${filename}: invalid severity ${String(value)} for ${rule}`,\n );\n }\n }\n\n if (config.scope !== undefined && !SCOPES.has(config.scope)) {\n throw new Error(\n `${filename}: scope must be full, files, changed, or lines`,\n );\n }\n\n if (\n config.diff !== undefined &&\n typeof config.diff !== \"boolean\" &&\n typeof config.diff !== \"string\"\n ) {\n throw new Error(`${filename}: diff must be a boolean or git ref string`);\n }\n\n if (config.base !== undefined && typeof config.base !== \"string\")\n throw new Error(`${filename}: base must be a string`);\n\n if (config.verbose !== undefined && typeof config.verbose !== \"boolean\")\n throw new Error(`${filename}: verbose must be a boolean`);\n\n if (config.warnings !== undefined && typeof config.warnings !== \"boolean\")\n throw new Error(`${filename}: warnings must be a boolean`);\n\n if (\n config.respectInlineDisables !== undefined &&\n typeof config.respectInlineDisables !== \"boolean\"\n ) {\n throw new Error(`${filename}: respectInlineDisables must be a boolean`);\n }\n\n if (config.blocking !== undefined && !BLOCKING_LEVELS.has(config.blocking)) {\n throw new Error(`${filename}: blocking must be error, warning, or none`);\n }\n}\n\nexport function effectiveSeverity(\n defaultSeverity: Severity,\n ruleId: string,\n config: DoctorConfig,\n): Severity | null {\n const configured = config.rules?.[ruleId];\n\n if (!configured) return defaultSeverity;\n\n return configured === \"off\" ? null : configured;\n}\n\nfunction configPathForWrite(root: string): string {\n const loaded = loadConfigWithSource(root);\n\n return loaded.filename ?? path.join(root, CONFIG_NAME);\n}\n\nexport function writeConfig(\n root: string,\n update: (config: DoctorConfig) => DoctorConfig,\n): string {\n const loaded = loadConfigWithSource(root);\n const next = update(structuredClone(loaded.config));\n validateConfig(next, loaded.filename ?? CONFIG_NAME);\n const filename = loaded.filename ?? configPathForWrite(root);\n fs.mkdirSync(path.dirname(filename), { recursive: true });\n fs.writeFileSync(filename, `${JSON.stringify(next, null, 2)}\\n`);\n\n return filename;\n}\n\nexport function normalizeRuleSetting(value: string): RuleSetting | null {\n const normalized = value.toLowerCase();\n\n if (normalized === \"warn\") return \"warning\";\n\n if (\n normalized === \"off\" ||\n normalized === \"error\" ||\n normalized === \"warning\" ||\n normalized === \"suggestion\"\n ) {\n return normalized;\n }\n\n return null;\n}\n\nexport function normalizeCategory(value: string): Category | null {\n const normalized = value.toLowerCase();\n\n for (const category of CATEGORIES) {\n if (category.toLowerCase() === normalized) return category;\n }\n\n return null;\n}\n",
7
7
  "import type { SyntaxNode } from \"../syntax\";\r\n\r\nexport function walk(node: SyntaxNode): SyntaxNode[] {\r\n const result: SyntaxNode[] = [];\r\n const stack = [node];\r\n\r\n while (stack.length > 0) {\r\n const current = stack.pop()!;\r\n result.push(current);\r\n\r\n const children = current.namedChildren;\r\n for (let index = children.length - 1; index >= 0; index -= 1) {\r\n stack.push(children[index]);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function ancestors(node: SyntaxNode): SyntaxNode[] {\r\n const result: SyntaxNode[] = [];\r\n let current = node.parent;\r\n while (current) {\r\n result.push(current);\r\n current = current.parent;\r\n }\r\n return result;\r\n}\r\n\r\nexport function nearestAncestor(node: SyntaxNode, predicate: (candidate: SyntaxNode) => boolean): SyntaxNode | null {\r\n let current = node.parent;\r\n while (current) {\r\n if (predicate(current)) return current;\r\n current = current.parent;\r\n }\r\n return null;\r\n}\r\n\r\nexport function descendantsOfType(node: SyntaxNode, type: string): SyntaxNode[] {\r\n const result: SyntaxNode[] = [];\r\n for (const candidate of walk(node)) {\r\n if (candidate.type === type) result.push(candidate);\r\n }\r\n return result;\r\n}\r\n\r\n\r\nexport function parameterBindingNames(parameters: SyntaxNode | null | undefined): string[] {\r\n if (!parameters) return [];\r\n const result: string[] = [];\r\n for (const parameter of parameters.namedChildren) {\r\n if (parameter.type !== \"parameter\") continue;\r\n const identifier = parameter.namedChildren.find((child) => child.type === \"identifier\");\r\n if (identifier) result.push(identifier.text);\r\n }\r\n return [...new Set(result)];\r\n}\r\n\r\nexport function rootIdentifier(text: string): string | null {\r\n const match = text.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/);\r\n return match?.[1] ?? null;\r\n}\r\n\r\nexport function normalizeExpressionText(text: string): string {\r\n return text.replace(/\\s+/g, \"\").replace(/^\\((.*)\\)$/s, \"$1\");\r\n}\r\n\r\nexport function nodeKey(node: SyntaxNode): number {\r\n return node.id;\r\n}\r\n\r\nexport function sameNode(left: SyntaxNode | null | undefined, right: SyntaxNode | null | undefined): boolean {\r\n return Boolean(left && right && nodeKey(left) === nodeKey(right));\r\n}\r\n",
8
- "import type { SyntaxNode } from \"../syntax\";\r\nimport type { FunctionInfo, RuleContext } from \"../types\";\r\nimport { normalizeExpressionText, parameterBindingNames } from \"./walk\";\r\n\r\ninterface LocalValue {\r\n value: SyntaxNode;\r\n returnIndex: number;\r\n}\r\n\r\nconst valueCache = new WeakMap<RuleContext, Map<number, LocalValue | null>>();\r\nconst apiCache = new WeakMap<RuleContext, Map<number, string | null>>();\r\n\r\nexport function unwrapExpression(node: SyntaxNode): SyntaxNode {\r\n while (\r\n [\"parenthesized_expression\", \"cast_expression\"].includes(node.type) &&\r\n node.namedChildren[0]\r\n ) {\r\n node = node.namedChildren[0];\r\n }\r\n\r\n return node;\r\n}\r\n\r\nfunction assignedValue(\r\n statement: SyntaxNode,\r\n name: string,\r\n): LocalValue | null | undefined {\r\n const assignment =\r\n statement.type === \"variable_declaration\"\r\n ? statement.namedChildren.find(\r\n (child) => child.type === \"assignment_statement\",\r\n )\r\n : statement;\r\n\r\n const variables = assignment?.namedChildren.find(\r\n (child) => child.type === \"variable_list\",\r\n );\r\n\r\n const expressions =\r\n assignment?.namedChildren.find((child) => child.type === \"expression_list\")\r\n ?.namedChildren ?? [];\r\n\r\n const index =\r\n variables?.namedChildren.findIndex(\r\n (child) => child.type === \"identifier\" && child.text === name,\r\n ) ?? -1;\r\n\r\n if (index < 0) return undefined;\r\n\r\n const value = expressions[index] ?? expressions.at(-1);\r\n\r\n if (!value) return null;\r\n\r\n const returnIndex = Math.max(0, index - expressions.length + 1);\r\n\r\n if (returnIndex > 0 && value.type !== \"function_call\") return null;\r\n\r\n return { value, returnIndex };\r\n}\r\n\r\nfunction visibleValue(\r\n context: RuleContext,\r\n node: SyntaxNode,\r\n): LocalValue | null | undefined {\r\n const name = node.text;\r\n let current = node.parent;\r\n\r\n while (current) {\r\n if (\r\n [\"function_definition\", \"function_declaration\"].includes(current.type) &&\r\n parameterBindingNames(current.childForFieldName(\"parameters\")).includes(\r\n name,\r\n )\r\n )\r\n return null;\r\n\r\n if (current.type === \"for_statement\") {\r\n const header = current.text.split(/\\bdo\\b/, 1)[0];\r\n\r\n const names = header\r\n .match(/^\\s*for\\s+(.+?)\\s*(?:=|\\bin\\b)/s)?.[1]\r\n .split(\",\")\r\n .map((part) => part.trim());\r\n\r\n if (names?.includes(name)) return null;\r\n }\r\n\r\n if (current.type === \"block\" || current.id === context.root.id) {\r\n for (const child of [...current.namedChildren].reverse()) {\r\n if (child.startIndex >= node.startIndex) continue;\r\n\r\n if (\r\n child.type === \"function_declaration\" &&\r\n child.childForFieldName(\"name\")?.text === name\r\n ) {\r\n return { value: child, returnIndex: 0 };\r\n }\r\n\r\n if (\r\n child.type === \"variable_declaration\" ||\r\n child.type === \"assignment_statement\"\r\n ) {\r\n if (child.endIndex > node.startIndex) continue;\r\n\r\n const value = assignedValue(child, name);\r\n\r\n if (value !== undefined) return value;\r\n } else if (\r\n child.endIndex < node.startIndex &&\r\n child.type !== \"function_declaration\"\r\n ) {\r\n // A conditional reassignment makes the earlier value uncertain\r\n for (const nested of context.walk(child)) {\r\n if (\r\n nested.type !== \"assignment_statement\" ||\r\n nested.parent?.type === \"variable_declaration\"\r\n )\r\n continue;\r\n\r\n if (\r\n context.nearestFunction(nested) !== context.nearestFunction(node)\r\n )\r\n continue;\r\n\r\n if (assignedValue(nested, name) !== undefined) return null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n current = current.parent;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function resolveLocalValue(\r\n context: RuleContext,\r\n expression: SyntaxNode,\r\n seen = new Set<number>(),\r\n): LocalValue | null {\r\n const node = unwrapExpression(expression);\r\n\r\n if (seen.has(node.id)) return null;\r\n\r\n let cache = valueCache.get(context);\r\n\r\n if (!cache) {\r\n cache = new Map();\r\n valueCache.set(context, cache);\r\n }\r\n\r\n if (cache.has(node.id)) return cache.get(node.id) ?? null;\r\n\r\n seen.add(node.id);\r\n\r\n const binding =\r\n node.type === \"identifier\"\r\n ? visibleValue(context, node)\r\n : { value: node, returnIndex: 0 };\r\n\r\n const result = !binding\r\n ? null\r\n : binding.returnIndex > 0 || node.type !== \"identifier\"\r\n ? binding\r\n : resolveLocalValue(context, binding.value, seen);\r\n\r\n cache.set(node.id, result);\r\n\r\n return result;\r\n}\r\n\r\nexport function resolveLocalFunction(\r\n context: RuleContext,\r\n expression: SyntaxNode,\r\n): FunctionInfo | null {\r\n const resolved = resolveLocalValue(context, expression);\r\n\r\n if (!resolved || resolved.returnIndex !== 0) return null;\r\n\r\n return context.model.functionByNode.get(resolved.value.id) ?? null;\r\n}\r\n\r\nexport function reactApiPath(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n): string | null {\r\n let cache = apiCache.get(context);\r\n\r\n if (!cache) {\r\n cache = new Map();\r\n apiCache.set(context, cache);\r\n }\r\n\r\n if (cache.has(call.id)) return cache.get(call.id) ?? null;\r\n\r\n const result = resolveReactApiPath(context, call);\r\n cache.set(call.id, result);\r\n\r\n return result;\r\n}\r\n\r\nfunction resolveReactApiPath(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n): string | null {\r\n const name = call.childForFieldName(\"name\");\r\n\r\n if (!name) return null;\r\n\r\n const resolved = resolveLocalValue(context, name);\r\n\r\n if (!resolved || resolved.returnIndex !== 0) return null;\r\n\r\n const path = normalizeExpressionText(resolved.value.text);\r\n\r\n const match = path.match(\r\n /^([A-Za-z_][A-Za-z0-9_]*)\\.([A-Za-z_][A-Za-z0-9_]*)$/,\r\n );\r\n\r\n if (!match) return null;\r\n\r\n const namespace = resolved.value.namedChildren[0];\r\n\r\n if (!namespace) return null;\r\n\r\n const visible = visibleValue(context, namespace);\r\n\r\n if (visible === null) return null;\r\n\r\n const binding = resolveLocalValue(context, namespace);\r\n\r\n if (\r\n visible !== undefined &&\r\n (!binding || !/^require\\s*\\(.*\\bReact\\b.*\\)$/s.test(binding.value.text))\r\n )\r\n return null;\r\n\r\n if (visible === undefined && !context.model.reactNamespaces.has(match[1]))\r\n return null;\r\n\r\n // An unbound React namespace is supported by the existing React model\r\n return `React.${match[2]}`;\r\n}\r\n",
8
+ "import type { SyntaxNode } from \"../syntax\";\nimport type { FunctionInfo, RuleContext } from \"../types\";\nimport { normalizeExpressionText, parameterBindingNames } from \"./walk\";\n\ninterface LocalValue {\n value: SyntaxNode;\n returnIndex: number;\n}\n\nconst valueCache = new WeakMap<RuleContext, Map<number, LocalValue | null>>();\nconst apiCache = new WeakMap<RuleContext, Map<number, string | null>>();\n\nexport function isUnboundIdentifier(\n context: RuleContext,\n node: SyntaxNode,\n): boolean {\n return (\n node.type === \"identifier\" && visibleValue(context, node) === undefined\n );\n}\n\nexport function localValueBinding(\n context: RuleContext,\n node: SyntaxNode,\n): LocalValue | null | undefined {\n return node.type === \"identifier\" ? visibleValue(context, node) : null;\n}\n\nexport function unwrapExpression(node: SyntaxNode): SyntaxNode {\n while (\n [\"parenthesized_expression\", \"cast_expression\"].includes(node.type) &&\n node.namedChildren[0]\n ) {\n node = node.namedChildren[0];\n }\n\n return node;\n}\n\nfunction assignedValue(\n statement: SyntaxNode,\n name: string,\n): LocalValue | null | undefined {\n const assignment =\n statement.type === \"variable_declaration\"\n ? statement.namedChildren.find(\n (child) => child.type === \"assignment_statement\",\n )\n : statement;\n\n const variables = assignment?.namedChildren.find(\n (child) => child.type === \"variable_list\",\n );\n\n const expressions =\n assignment?.namedChildren.find((child) => child.type === \"expression_list\")\n ?.namedChildren ?? [];\n\n const index =\n variables?.namedChildren.findIndex(\n (child) => child.type === \"identifier\" && child.text === name,\n ) ?? -1;\n\n if (index < 0) return undefined;\n\n const value = expressions[index] ?? expressions.at(-1);\n\n if (!value) return null;\n\n const returnIndex = Math.max(0, index - expressions.length + 1);\n\n if (returnIndex > 0 && value.type !== \"function_call\") return null;\n\n return { value, returnIndex };\n}\n\nfunction visibleValue(\n context: RuleContext,\n node: SyntaxNode,\n): LocalValue | null | undefined {\n const name = node.text;\n let current = node.parent;\n\n while (current) {\n if (\n [\"function_definition\", \"function_declaration\"].includes(current.type) &&\n parameterBindingNames(current.childForFieldName(\"parameters\")).includes(\n name,\n )\n )\n return null;\n\n if (current.type === \"for_statement\") {\n const header = current.text.split(/\\bdo\\b/, 1)[0];\n\n const names = header\n .match(/^\\s*for\\s+(.+?)\\s*(?:=|\\bin\\b)/s)?.[1]\n .split(\",\")\n .map((part) => part.trim());\n\n if (names?.includes(name)) return null;\n }\n\n if (current.type === \"block\" || current.id === context.root.id) {\n for (const child of [...current.namedChildren].reverse()) {\n if (child.startIndex >= node.startIndex) continue;\n\n if (\n child.type === \"function_declaration\" &&\n child.childForFieldName(\"name\")?.text === name\n ) {\n return { value: child, returnIndex: 0 };\n }\n\n if (\n child.type === \"variable_declaration\" ||\n child.type === \"assignment_statement\"\n ) {\n if (child.endIndex > node.startIndex) continue;\n\n const value = assignedValue(child, name);\n\n if (value !== undefined) return value;\n } else if (\n child.endIndex < node.startIndex &&\n child.type !== \"function_declaration\"\n ) {\n // A conditional reassignment makes the earlier value uncertain\n for (const nested of context.walk(child)) {\n if (\n nested.type !== \"assignment_statement\" ||\n nested.parent?.type === \"variable_declaration\"\n )\n continue;\n\n if (\n context.nearestFunction(nested) !== context.nearestFunction(node)\n )\n continue;\n\n if (assignedValue(nested, name) !== undefined) return null;\n }\n }\n }\n }\n\n current = current.parent;\n }\n\n return undefined;\n}\n\nexport function resolveLocalValue(\n context: RuleContext,\n expression: SyntaxNode,\n seen = new Set<number>(),\n): LocalValue | null {\n const node = unwrapExpression(expression);\n\n if (seen.has(node.id)) return null;\n\n let cache = valueCache.get(context);\n\n if (!cache) {\n cache = new Map();\n valueCache.set(context, cache);\n }\n\n if (cache.has(node.id)) return cache.get(node.id) ?? null;\n\n seen.add(node.id);\n\n const binding =\n node.type === \"identifier\"\n ? visibleValue(context, node)\n : { value: node, returnIndex: 0 };\n\n const result = !binding\n ? null\n : binding.returnIndex > 0 || node.type !== \"identifier\"\n ? binding\n : resolveLocalValue(context, binding.value, seen);\n\n cache.set(node.id, result);\n\n return result;\n}\n\nexport function resolveLocalFunction(\n context: RuleContext,\n expression: SyntaxNode,\n): FunctionInfo | null {\n const resolved = resolveLocalValue(context, expression);\n\n if (!resolved || resolved.returnIndex !== 0) return null;\n\n return context.model.functionByNode.get(resolved.value.id) ?? null;\n}\n\nexport function reactApiPath(\n context: RuleContext,\n call: SyntaxNode,\n): string | null {\n let cache = apiCache.get(context);\n\n if (!cache) {\n cache = new Map();\n apiCache.set(context, cache);\n }\n\n if (cache.has(call.id)) return cache.get(call.id) ?? null;\n\n const result = resolveReactApiPath(context, call);\n cache.set(call.id, result);\n\n return result;\n}\n\nfunction resolveReactApiPath(\n context: RuleContext,\n call: SyntaxNode,\n): string | null {\n const name = call.childForFieldName(\"name\");\n\n if (!name) return null;\n\n const resolved = resolveLocalValue(context, name);\n\n if (!resolved || resolved.returnIndex !== 0) return null;\n\n const path = normalizeExpressionText(resolved.value.text);\n\n const match = path.match(\n /^([A-Za-z_][A-Za-z0-9_]*)\\.([A-Za-z_][A-Za-z0-9_]*)$/,\n );\n\n if (!match) return null;\n\n const namespace = resolved.value.namedChildren[0];\n\n if (!namespace) return null;\n\n const visible = visibleValue(context, namespace);\n\n if (visible === null) return null;\n\n const binding = resolveLocalValue(context, namespace);\n\n if (\n visible !== undefined &&\n (!binding || !/^require\\s*\\(.*\\bReact\\b.*\\)$/s.test(binding.value.text))\n )\n return null;\n\n if (visible === undefined && !context.model.reactNamespaces.has(match[1]))\n return null;\n\n // An unbound React namespace is supported by the existing React model\n return `React.${match[2]}`;\n}\n",
9
9
  "import type { SyntaxNode } from \"../syntax\";\r\nimport type { FunctionInfo, RuleContext } from \"../types\";\r\nimport { rootIdentifier, sameNode } from \"../ast/walk\";\r\n\r\nexport const CONDITIONAL_TYPES = new Set([\r\n \"if_statement\",\r\n \"if_expression\",\r\n \"for_statement\",\r\n \"while_statement\",\r\n \"repeat_statement\",\r\n]);\r\n\r\nexport function isHookPath(path: string): boolean {\r\n const final = path.split(/[.:]/).at(-1) ?? \"\";\r\n return /^use[A-Z0-9_]/.test(final);\r\n}\r\n\r\n\r\nexport function assignmentTargetNode(statement: SyntaxNode): SyntaxNode {\r\n return statement.namedChildren[0] ?? statement;\r\n}\r\n\r\nexport function tableStartNode(table: SyntaxNode): SyntaxNode {\r\n return table.children.find((child) => child.type === \"{\") ?? table;\r\n}\r\n\r\nexport function identifierNode(node: SyntaxNode, name: string): SyntaxNode | null {\r\n const stack = [node];\r\n while (stack.length > 0) {\r\n const current = stack.pop()!;\r\n if (current.type === \"identifier\" && current.text === name) return current;\r\n for (let index = current.namedChildren.length - 1; index >= 0; index -= 1) stack.push(current.namedChildren[index]);\r\n }\r\n return null;\r\n}\r\n\r\nexport function callNameNode(call: SyntaxNode): SyntaxNode {\r\n return call.childForFieldName(\"name\") ?? call;\r\n}\r\n\r\nexport function fieldNameNode(field: SyntaxNode): SyntaxNode {\r\n return field.childForFieldName(\"name\") ?? field;\r\n}\r\n\r\nexport function firstFunctionArgument(context: RuleContext, call: SyntaxNode): SyntaxNode | null {\r\n return context.callArguments(call).find((arg) => arg.type === \"function_definition\") ?? null;\r\n}\r\n\r\nexport function directComponentForCall(context: RuleContext, call: SyntaxNode): FunctionInfo | null {\r\n const fn = context.nearestFunction(call);\r\n return fn?.isComponent ? fn : null;\r\n}\r\n\r\nexport function findAncestorBetween(node: SyntaxNode, stop: SyntaxNode, predicate: (node: SyntaxNode) => boolean): SyntaxNode | null {\r\n let current = node.parent;\r\n while (current && !sameNode(current, stop)) {\r\n if (predicate(current)) return current;\r\n current = current.parent;\r\n }\r\n return null;\r\n}\r\n\r\nexport function declarationNames(node: SyntaxNode): string[] {\r\n if (node.type !== \"variable_declaration\") return [];\r\n const beforeEquals = node.text.split(\"=\")[0] ?? \"\";\r\n return beforeEquals\r\n .replace(/^\\s*local\\s+/, \"\")\r\n .split(\",\")\r\n .map((piece) => piece.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1] ?? null)\r\n .filter((name): name is string => Boolean(name));\r\n}\r\n\r\nexport function callRoot(path: string): string | null {\r\n return rootIdentifier(path);\r\n}\r\n\r\nexport function isNestedInsideFunction(node: SyntaxNode, boundary: SyntaxNode): boolean {\r\n let current = node.parent;\r\n while (current && !sameNode(current, boundary)) {\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return true;\r\n current = current.parent;\r\n }\r\n return false;\r\n}\r\n\r\nexport function functionHasReturnedBefore(call: SyntaxNode, fn: FunctionInfo, context: RuleContext): boolean {\r\n if (!fn.body) return false;\r\n for (const node of context.walk(fn.body)) {\r\n if (node.endIndex > call.startIndex) continue;\r\n if (node.type !== \"return_statement\") continue;\r\n if (isNestedInsideFunction(node, fn.node)) continue;\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function parseDependencyRoots(node: SyntaxNode | undefined): Set<string> {\r\n const result = new Set<string>();\r\n if (!node || node.type !== \"table_constructor\") return result;\r\n\r\n for (const child of node.namedChildren) {\r\n const root = rootIdentifier(child.text);\r\n if (root) result.add(root);\r\n }\r\n return result;\r\n}\r\n\r\nexport function assignmentLeft(text: string): string {\r\n const match = text.match(/^(.*?)(?:\\+=|-=|\\*=|\\/=|%=|\\^=|\\.\\.=|\\/=|=)/s);\r\n return match?.[1]?.trim() ?? \"\";\r\n}\r\n\r\nexport function functionInfoForNode(context: RuleContext, node: SyntaxNode | null): FunctionInfo | null {\r\n if (!node) return null;\r\n return context.model.functionByNode.get(node.id) ?? null;\r\n}\r\n\r\nexport function stateBindingsFor(context: RuleContext, owner: FunctionInfo): typeof context.model.stateBindings {\r\n return context.model.stateBindings.filter((binding) => binding.owner === owner);\r\n}\r\n\r\nexport function isEffectPath(path: string): boolean {\r\n return path === \"React.useEffect\" || path === \"React.useLayoutEffect\";\r\n}\r\n\r\nexport function dependencyExpressions(node: SyntaxNode | undefined): SyntaxNode[] {\r\n if (!node || node.type !== \"table_constructor\") return [];\r\n return node.namedChildren\r\n .filter((child) => child.type === \"field\")\r\n .map((field) => {\r\n const name = field.childForFieldName(\"name\");\r\n if (name && field.text.trim().startsWith(\"[\")) return name;\r\n return field.namedChildren.find((child) => !sameNode(child, name)) ?? name ?? field;\r\n });\r\n}\r\n\r\nexport function fieldName(node: SyntaxNode): string | null {\r\n if (node.type !== \"field\") return null;\r\n const name = node.childForFieldName(\"name\");\r\n return name?.type === \"identifier\" ? name.text : null;\r\n}\r\n\r\nexport function fieldValue(node: SyntaxNode): SyntaxNode | null {\r\n if (node.type !== \"field\") return null;\r\n const name = node.childForFieldName(\"name\");\r\n if (!name) return node.namedChildren[0] ?? null;\r\n return node.namedChildren.find((child) => child.startIndex > name.endIndex) ?? null;\r\n}\r\n\r\nexport function containsIdentifier(node: SyntaxNode | null | undefined, name: string, context: RuleContext): boolean {\r\n if (!node) return false;\r\n for (const child of context.walk(node)) {\r\n if (child.type !== \"identifier\" || child.text !== name) continue;\r\n const parent = child.parent;\r\n if (parent?.type === \"dot_index_expression\" && sameNode(parent.childForFieldName(\"field\"), child)) continue;\r\n if (parent?.type === \"method_index_expression\" && (sameNode(parent.childForFieldName(\"method\"), child) || sameNode(parent.namedChildren.at(-1), child))) continue;\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function ownerStateSetter(context: RuleContext, owner: FunctionInfo, path: string): string | null {\r\n for (const binding of context.model.stateBindings) {\r\n if (binding.owner === owner && binding.setterName === path) return binding.valueName;\r\n }\r\n return null;\r\n}\r\n\r\n\r\nfunction parameterNames(node: SyntaxNode | null): Set<string> {\r\n const names = new Set<string>();\r\n if (!node) return names;\r\n for (const candidate of node.namedChildren) {\r\n for (const child of [candidate, ...Array.from((function* walkLocal(current: SyntaxNode): Iterable<SyntaxNode> {\r\n for (const nested of current.namedChildren) {\r\n yield nested;\r\n yield* walkLocal(nested);\r\n }\r\n })(candidate))]) {\r\n if (child.type === \"identifier\") names.add(child.text);\r\n }\r\n }\r\n return names;\r\n}\r\n\r\nfunction blockBindingsBefore(block: SyntaxNode, beforeIndex: number): Set<string> {\r\n const names = new Set<string>();\r\n for (const child of block.namedChildren) {\r\n if (child.startIndex >= beforeIndex) continue;\r\n if (child.type === \"variable_declaration\") {\r\n for (const name of declarationNames(child)) names.add(name);\r\n } else if (child.type === \"function_declaration\") {\r\n const name = child.childForFieldName(\"name\")?.text;\r\n if (name && /^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) names.add(name);\r\n }\r\n }\r\n return names;\r\n}\r\n\r\nfunction loopBindings(loop: SyntaxNode): Set<string> {\r\n const names = new Set<string>();\r\n const header = loop.text.split(/\\bdo\\b/s, 1)[0] ?? \"\";\r\n const numeric = header.match(/^\\s*for\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=/s);\r\n if (numeric) names.add(numeric[1]);\r\n const generic = header.match(/^\\s*for\\s+(.+?)\\s+in\\b/s);\r\n if (generic) {\r\n for (const part of generic[1].split(\",\")) {\r\n const name = part.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\r\n if (name) names.add(name);\r\n }\r\n }\r\n return names;\r\n}\r\n\r\nexport function isNameShadowedBetween(node: SyntaxNode, boundary: FunctionInfo, name: string): boolean {\r\n let current: SyntaxNode | null = node.parent;\r\n while (current && !sameNode(current, boundary.node)) {\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") {\r\n if (parameterNames(current.childForFieldName(\"parameters\")).has(name)) return true;\r\n }\r\n if (current.type === \"block\" && !sameNode(current.parent, boundary.node) && blockBindingsBefore(current, node.startIndex).has(name)) return true;\r\n if (current.type === \"for_statement\" && loopBindings(current).has(name)) return true;\r\n current = current.parent;\r\n }\r\n return false;\r\n}\r\n\r\nconst topLevelBindingsCache = new WeakMap<FunctionInfo, Map<string, SyntaxNode[]>>();\r\n\r\nfunction topLevelBindings(boundary: FunctionInfo): Map<string, SyntaxNode[]> {\r\n const cached = topLevelBindingsCache.get(boundary);\r\n if (cached) return cached;\r\n\r\n const result = new Map<string, SyntaxNode[]>();\r\n const add = (name: string, node: SyntaxNode): void => {\r\n const existing = result.get(name) ?? [];\r\n existing.push(node);\r\n result.set(name, existing);\r\n };\r\n\r\n for (const child of boundary.body?.namedChildren ?? []) {\r\n if (child.type === \"variable_declaration\") {\r\n for (const name of declarationNames(child)) add(name, child);\r\n } else if (child.type === \"function_declaration\") {\r\n const declared = child.childForFieldName(\"name\")?.text.replace(/\\s+/g, \"\") ?? \"\";\r\n if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(declared)) add(declared, child);\r\n }\r\n }\r\n\r\n topLevelBindingsCache.set(boundary, result);\r\n return result;\r\n}\r\n\r\nexport function isBindingShadowedBetween(\r\n node: SyntaxNode,\r\n boundary: FunctionInfo,\r\n name: string,\r\n declaration: SyntaxNode | null = null,\r\n): boolean {\r\n if (isNameShadowedBetween(node, boundary, name)) return true;\r\n if (!boundary.body) return false;\r\n\r\n const afterIndex = declaration?.endIndex ?? boundary.body.startIndex - 1;\r\n return (topLevelBindings(boundary).get(name) ?? []).some((binding) =>\r\n binding.startIndex > afterIndex && binding.startIndex < node.startIndex\r\n );\r\n}\r\n\r\nexport function containsUnshadowedIdentifier(\r\n node: SyntaxNode | null | undefined,\r\n name: string,\r\n context: RuleContext,\r\n boundary: FunctionInfo,\r\n): boolean {\r\n if (!node) return false;\r\n for (const child of context.walk(node)) {\r\n if (child.type !== \"identifier\" || child.text !== name) continue;\r\n const parent = child.parent;\r\n if (parent?.type === \"dot_index_expression\" && sameNode(parent.childForFieldName(\"field\"), child)) continue;\r\n if (parent?.type === \"method_index_expression\" && (sameNode(parent.childForFieldName(\"method\"), child) || sameNode(parent.namedChildren.at(-1), child))) continue;\r\n if (isNameShadowedBetween(child, boundary, name)) continue;\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function directFunctionCalls(context: RuleContext, fn: FunctionInfo): SyntaxNode[] {\r\n if (!fn.body) return [];\r\n return [...context.walk(fn.body)].filter((node) => node.type === \"function_call\" && context.nearestFunction(node) === fn);\r\n}\r\n\r\nexport function isUnconditionallyExecutedInFunction(\n context: RuleContext,\n node: SyntaxNode,\n fn: FunctionInfo,\n): boolean {\n if (\n !context.isDirectlyExecutedInFunction(node, fn) ||\n functionHasReturnedBefore(node, fn, context)\n )\n return false;\n\n let child = node;\n let parent = node.parent;\n\n while (parent && !sameNode(parent, fn.node)) {\n // A break can skip a repeat loop's condition even on its first iteration\r\n if (parent.type === \"repeat_statement\") return false;\r\n\r\n if (CONDITIONAL_TYPES.has(parent.type)) {\n if (!sameNode(parent.childForFieldName(\"condition\"), child)) return false;\n }\n\n if (\n parent.type === \"binary_expression\" &&\n parent.children.some(\n (token) => token.type === \"and\" || token.type === \"or\",\n )\n ) {\n if (!sameNode(parent.childForFieldName(\"left\"), child)) return false;\n }\n\n child = parent;\n parent = parent.parent;\n }\n\n return sameNode(parent, fn.node);\n}\n",
10
- "import { reactApiPath, resolveLocalValue } from \"../ast/local-values\";\r\nimport { normalizeExpressionText } from \"../ast/walk\";\r\nimport type { SyntaxNode } from \"../syntax\";\r\nimport type { RuleContext, RuleDefinition } from \"../types\";\r\nimport { callNameNode } from \"./helpers\";\r\n\r\nfunction isBinding(\r\n context: RuleContext,\r\n expression: SyntaxNode,\r\n seen = new Set<number>(),\r\n): boolean {\r\n if (seen.has(expression.id)) return false;\r\n\r\n seen.add(expression.id);\r\n const resolved = resolveLocalValue(context, expression);\r\n\r\n if (\r\n !resolved ||\r\n resolved.returnIndex !== 0 ||\r\n resolved.value.type !== \"function_call\"\r\n )\r\n return false;\r\n\r\n if (\r\n [\"React.useBinding\", \"React.createBinding\", \"React.joinBindings\"].includes(\r\n reactApiPath(context, resolved.value) ?? \"\",\r\n )\r\n )\r\n return true;\r\n\r\n const name = resolved.value.childForFieldName(\"name\");\r\n\r\n return (\r\n name?.type === \"method_index_expression\" &&\r\n name.namedChildren.at(-1)?.text === \"map\" &&\r\n Boolean(\r\n name.namedChildren[0] && isBinding(context, name.namedChildren[0], seen),\r\n )\r\n );\r\n}\r\n\r\nfunction isLazyRefInitialization(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n): boolean {\r\n let node = call.parent;\r\n\r\n while (\r\n node &&\r\n ![\"function_definition\", \"function_declaration\"].includes(node.type)\r\n ) {\r\n if (node.type === \"if_statement\") {\r\n const condition = node.childForFieldName(\"condition\");\r\n const text = condition && normalizeExpressionText(condition.text);\r\n\r\n const match = text?.match(\r\n /^(?:([A-Za-z_]\\w*)\\.current==nil|nil==([A-Za-z_]\\w*)\\.current)$/,\r\n );\r\n\r\n if (!match) return false;\r\n\r\n const refName = match[1] ?? match[2];\r\n\r\n const ref =\r\n condition &&\r\n [...context.walk(condition)].find(\r\n (child) => child.type === \"identifier\" && child.text === refName,\r\n );\r\n\r\n const resolved = ref && resolveLocalValue(context, ref);\r\n\r\n if (!resolved || reactApiPath(context, resolved.value) !== \"React.useRef\")\r\n return false;\r\n\r\n let assignment = call.parent;\r\n\r\n while (assignment && assignment.id !== node.id) {\r\n if (assignment.type === \"assignment_statement\") {\r\n const target = assignment.namedChildren.find(\r\n (child) => child.type === \"variable_list\",\r\n )?.namedChildren[0];\r\n\r\n const thenBlock = node.namedChildren.find(\r\n (child) => child.type === \"block\",\r\n );\r\n\r\n return Boolean(\r\n target &&\r\n normalizeExpressionText(target.text) === `${refName}.current` &&\r\n thenBlock &&\r\n call.startIndex >= thenBlock.startIndex &&\r\n call.endIndex <= thenBlock.endIndex,\r\n );\r\n }\r\n\r\n assignment = assignment.parent;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n node = node.parent;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isRefInitializer(context: RuleContext, call: SyntaxNode): boolean {\r\n let node = call;\r\n\r\n while (node.parent) {\r\n const parent = node.parent;\r\n\r\n if ([\"function_definition\", \"function_declaration\"].includes(parent.type))\r\n return false;\r\n\r\n if (parent.type === \"arguments\") {\r\n const hook = parent.parent;\r\n\r\n if (\r\n hook?.type === \"function_call\" &&\r\n reactApiPath(context, hook) === \"React.useRef\" &&\r\n context.callArguments(hook)[0]?.id === node.id\r\n )\r\n return true;\r\n }\r\n\r\n node = parent;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport const noCreateBindingInRender: RuleDefinition = {\r\n id: \"react-luau/no-create-binding-in-render\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n description: \"Preserve binding identity across function component renders\",\r\n\r\n guidance: {\r\n explanation:\r\n \"React.createBinding creates a new binding and initial value on every render\",\r\n\r\n help: \"Use React.useBinding to preserve the binding and updater across renders\",\r\n },\r\n\r\n run(context) {\r\n return context.findCalls().flatMap((call) => {\r\n const owner = context.nearestFunction(call);\r\n\r\n if (\r\n !owner ||\r\n (!owner.isComponent && !owner.isHook) ||\r\n reactApiPath(context, call) !== \"React.createBinding\" ||\r\n isLazyRefInitialization(context, call)\r\n )\r\n return [];\r\n\r\n return [\r\n {\r\n node: callNameNode(call),\r\n message: \"React.createBinding creates a new binding on every render\",\r\n help: \"Use React.useBinding so rerenders preserve the binding and its current value\",\r\n },\r\n ];\r\n });\r\n },\r\n};\r\n\r\nexport const noBindingGetValueInRender: RuleDefinition = {\r\n id: \"react-luau/no-binding-getvalue-in-render\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n description:\r\n \"Do not read binding snapshots during render except to initialize a ref\",\r\n\r\n guidance: {\r\n explanation:\r\n \"getValue returns a snapshot without subscribing — later binding updates do not rerender the component or update props built from that snapshot\",\r\n\r\n help: \"Pass the binding directly to the prop or use binding:map(function(value) return ... end)\",\r\n caveat:\r\n \"A snapshot used to initialize React.useRef is allowed because the initial value is intentionally preserved\",\r\n },\r\n\r\n run(context) {\r\n return context.findCalls().flatMap((call) => {\r\n const owner = context.nearestFunction(call);\r\n const name = call.childForFieldName(\"name\");\r\n const receiver = name?.namedChildren[0];\r\n\r\n if (\r\n !owner ||\r\n (!owner.isComponent && !owner.isHook) ||\r\n name?.type !== \"method_index_expression\" ||\r\n name.namedChildren.at(-1)?.text !== \"getValue\" ||\r\n !receiver ||\r\n !isBinding(context, receiver) ||\r\n isRefInitializer(context, call)\r\n )\r\n return [];\r\n\r\n return [\r\n {\r\n node: name,\r\n message: `${receiver.text}:getValue() reads a binding snapshot during render`,\r\n help: \"Pass the binding itself or map it so the prop subscribes to binding updates\",\r\n },\r\n ];\r\n });\r\n },\r\n};\r\n",
10
+ "import { reactApiPath, resolveLocalValue } from \"../ast/local-values\";\r\nimport { normalizeExpressionText } from \"../ast/walk\";\r\nimport type { SyntaxNode } from \"../syntax\";\r\nimport type { RuleContext, RuleDefinition } from \"../types\";\r\nimport { callNameNode } from \"./helpers\";\r\n\r\nfunction isBinding(\r\n context: RuleContext,\r\n expression: SyntaxNode,\r\n seen = new Set<number>(),\r\n): boolean {\r\n if (seen.has(expression.id)) return false;\r\n\r\n seen.add(expression.id);\r\n const resolved = resolveLocalValue(context, expression);\r\n\r\n if (\r\n !resolved ||\r\n resolved.returnIndex !== 0 ||\r\n resolved.value.type !== \"function_call\"\r\n )\r\n return false;\r\n\r\n if (\r\n [\"React.useBinding\", \"React.createBinding\", \"React.joinBindings\"].includes(\r\n reactApiPath(context, resolved.value) ?? \"\",\r\n )\r\n )\r\n return true;\r\n\r\n const name = resolved.value.childForFieldName(\"name\");\r\n\r\n return (\r\n name?.type === \"method_index_expression\" &&\r\n name.namedChildren.at(-1)?.text === \"map\" &&\r\n Boolean(\r\n name.namedChildren[0] && isBinding(context, name.namedChildren[0], seen),\r\n )\r\n );\r\n}\r\n\r\nfunction isLazyRefInitialization(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n): boolean {\r\n let node = call.parent;\r\n\r\n while (\r\n node &&\r\n ![\"function_definition\", \"function_declaration\"].includes(node.type)\r\n ) {\r\n if (node.type === \"if_statement\") {\r\n const condition = node.childForFieldName(\"condition\");\r\n const text = condition && normalizeExpressionText(condition.text);\r\n\r\n const match = text?.match(\r\n /^(?:([A-Za-z_]\\w*)\\.current==nil|nil==([A-Za-z_]\\w*)\\.current)$/,\r\n );\r\n\r\n if (!match) return false;\r\n\r\n const refName = match[1] ?? match[2];\r\n\r\n const ref =\r\n condition &&\r\n [...context.walk(condition)].find(\r\n (child) => child.type === \"identifier\" && child.text === refName,\r\n );\r\n\r\n const resolved = ref && resolveLocalValue(context, ref);\r\n\r\n if (!resolved || reactApiPath(context, resolved.value) !== \"React.useRef\")\r\n return false;\r\n\r\n let assignment = call.parent;\r\n\r\n while (assignment && assignment.id !== node.id) {\r\n if (assignment.type === \"assignment_statement\") {\r\n const target = assignment.namedChildren.find(\r\n (child) => child.type === \"variable_list\",\r\n )?.namedChildren[0];\r\n\r\n const thenBlock = node.namedChildren.find(\r\n (child) => child.type === \"block\",\r\n );\r\n\r\n return Boolean(\r\n target &&\r\n normalizeExpressionText(target.text) === `${refName}.current` &&\r\n thenBlock &&\r\n call.startIndex >= thenBlock.startIndex &&\r\n call.endIndex <= thenBlock.endIndex,\r\n );\r\n }\r\n\r\n assignment = assignment.parent;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n node = node.parent;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nconst hookInitializerArguments = new Map([\r\n [\"React.useRef\", 0],\r\n [\"React.useState\", 0],\r\n [\"React.useBinding\", 0],\r\n [\"React.useReducer\", 1],\r\n]);\r\n\r\nfunction isHookInitializer(context: RuleContext, call: SyntaxNode): boolean {\r\n let node = call;\r\n\r\n while (node.parent) {\r\n const parent = node.parent;\r\n\r\n if ([\"function_definition\", \"function_declaration\"].includes(parent.type))\r\n return false;\r\n\r\n if (parent.type === \"arguments\") {\r\n const hook = parent.parent;\r\n\r\n if (hook?.type === \"function_call\") {\r\n const argumentIndex = hookInitializerArguments.get(\r\n reactApiPath(context, hook) ?? \"\",\r\n );\r\n\r\n if (\r\n argumentIndex !== undefined &&\r\n context.callArguments(hook)[argumentIndex]?.id === node.id\r\n )\r\n return true;\r\n }\r\n }\r\n\r\n node = parent;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport const noCreateBindingInRender: RuleDefinition = {\r\n id: \"react-luau/no-create-binding-in-render\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n description: \"Preserve binding identity across function component renders\",\r\n\r\n guidance: {\r\n explanation:\r\n \"React.createBinding creates a new binding and initial value on every render\",\r\n\r\n help: \"Use React.useBinding to preserve the binding and updater across renders\",\r\n },\r\n\r\n run(context) {\r\n return context.findCalls().flatMap((call) => {\r\n const owner = context.nearestFunction(call);\r\n\r\n if (\r\n !owner ||\r\n (!owner.isComponent && !owner.isHook) ||\r\n reactApiPath(context, call) !== \"React.createBinding\" ||\r\n isLazyRefInitialization(context, call)\r\n )\r\n return [];\r\n\r\n return [\r\n {\r\n node: callNameNode(call),\r\n message: \"React.createBinding creates a new binding on every render\",\r\n help: \"Use React.useBinding so rerenders preserve the binding and its current value\",\r\n },\r\n ];\r\n });\r\n },\r\n};\r\n\r\nexport const noBindingGetValueInRender: RuleDefinition = {\r\n id: \"react-luau/no-binding-getvalue-in-render\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n description:\r\n \"Do not read binding snapshots during render except in hook initialization arguments\",\r\n\r\n guidance: {\r\n explanation:\r\n \"getValue returns a snapshot without subscribing — later binding updates do not rerender the component or update props built from that snapshot\",\r\n\r\n help: \"Pass the binding directly to the prop or use binding:map(function(value) return ... end)\",\r\n caveat:\r\n \"Snapshots in the first argument to React.useRef, React.useState, or React.useBinding, or the second argument to React.useReducer, are allowed because those arguments are used only for initialization\",\r\n },\r\n\r\n run(context) {\r\n return context.findCalls().flatMap((call) => {\r\n const owner = context.nearestFunction(call);\r\n const name = call.childForFieldName(\"name\");\r\n const receiver = name?.namedChildren[0];\r\n\r\n if (\r\n !owner ||\r\n (!owner.isComponent && !owner.isHook) ||\r\n name?.type !== \"method_index_expression\" ||\r\n name.namedChildren.at(-1)?.text !== \"getValue\" ||\r\n !receiver ||\r\n !isBinding(context, receiver) ||\r\n isHookInitializer(context, call)\r\n )\r\n return [];\r\n\r\n return [\r\n {\r\n node: name,\r\n message: `${receiver.text}:getValue() reads a binding snapshot during render`,\r\n help: \"Pass the binding itself or map it so the prop subscribes to binding updates\",\r\n },\r\n ];\r\n });\r\n },\r\n};\r\n",
11
11
  "import {\r\n reactApiPath,\r\n resolveLocalFunction,\r\n resolveLocalValue,\r\n} from \"../ast/local-values\";\r\nimport type { RuleDefinition } from \"../types\";\r\nimport { callNameNode } from \"./helpers\";\r\n\r\nexport const noCallComponentAsFunction: RuleDefinition = {\r\n id: \"react-luau/no-call-component-as-function\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Render components with React.createElement instead of calling them directly\",\r\n\r\n guidance: {\r\n explanation:\r\n \"A direct call gives the child no separate component identity and runs its hooks as part of the caller\",\r\n\r\n help: \"Pass the component function and its props to React.createElement\",\r\n },\r\n\r\n run(context) {\r\n const components = new Set<number>();\r\n const returnsElement = new Set<number>();\r\n\r\n for (const node of context.walk()) {\r\n if (node.type !== \"return_statement\") continue;\r\n\r\n const expression = node.namedChildren.find(\r\n (child) => child.type === \"expression_list\",\r\n )?.namedChildren[0];\r\n const returned = expression && resolveLocalValue(context, expression);\r\n const owner = context.nearestFunction(node);\r\n\r\n if (\r\n owner &&\r\n returned?.returnIndex === 0 &&\r\n returned.value.type === \"function_call\" &&\r\n reactApiPath(context, returned.value) === \"React.createElement\"\r\n )\r\n returnsElement.add(owner.node.id);\r\n }\r\n\r\n for (const call of context.findCalls()) {\r\n if (reactApiPath(context, call) === \"React.createElement\") {\r\n const argument = context.callArguments(call)[0];\r\n const component = argument && resolveLocalFunction(context, argument);\r\n\r\n if (component) components.add(component.node.id);\r\n }\r\n\r\n const owner = context.nearestFunction(call);\r\n\r\n if (\r\n owner?.isComponent &&\r\n returnsElement.has(owner.node.id) &&\r\n /^React\\.use[A-Z]/.test(reactApiPath(context, call) ?? \"\")\r\n )\r\n components.add(owner.node.id);\r\n }\r\n\r\n return context.findCalls().flatMap((call) => {\r\n const name = call.childForFieldName(\"name\");\r\n const component = name && resolveLocalFunction(context, name);\r\n\r\n if (!component || !components.has(component.node.id)) return [];\r\n\r\n return [\r\n {\r\n node: callNameNode(call),\r\n message: `${name!.text} is called directly instead of rendered as a component`,\r\n help: \"Use React.createElement(component, props) so React owns the component's hooks and identity\",\r\n },\r\n ];\r\n });\r\n },\r\n};\r\n",
12
12
  "import path from \"node:path\";\r\n\r\nexport interface ModuleIdentity {\r\n id: string;\r\n keys: string[];\r\n}\r\n\r\nfunction normalizeRelative(value: string): string {\r\n return value.split(path.sep).join(\"/\");\r\n}\r\n\r\nexport function moduleKeys(relativePath: string): string[] {\r\n let normalized = normalizeRelative(relativePath).replace(/\\.(?:lua|luau)$/i, \"\");\r\n if (normalized.endsWith(\"/init\")) normalized = normalized.slice(0, -\"/init\".length);\r\n const segments = normalized.split(\"/\").filter(Boolean);\r\n if (segments[0]?.toLowerCase() === \"src\") segments.shift();\r\n\r\n const keys = new Set<string>();\r\n for (let index = 0; index < segments.length; index += 1) {\r\n const suffix = segments.slice(index).join(\".\").toLowerCase();\r\n if (suffix) keys.add(suffix);\r\n }\r\n return [...keys];\r\n}\r\n\r\nexport function normalizeRequireTarget(text: string): string {\r\n return (text.match(/[A-Za-z_][A-Za-z0-9_]*/g) ?? []).join(\".\").toLowerCase();\r\n}\r\n\r\n/**\r\n * Builds feature aliases only when an alias uniquely identifies one module in\r\n * the entire project. This prevents basename collisions and overlapping names\r\n * when one module name is merely a suffix of another or when multiple\r\n * directories contain modules with the same basename.\r\n */\r\nexport function buildUniqueFeatureAliases<T>(\r\n modules: ModuleIdentity[],\r\n featureByModuleId: Map<string, T>,\r\n): Map<string, T> {\r\n const owners = new Map<string, Set<string>>();\r\n for (const module of modules) {\r\n for (const key of module.keys) {\r\n const ids = owners.get(key) ?? new Set<string>();\r\n ids.add(module.id);\r\n owners.set(key, ids);\r\n }\r\n }\r\n\r\n const aliases = new Map<string, T>();\r\n for (const module of modules) {\r\n const value = featureByModuleId.get(module.id);\r\n if (value === undefined) continue;\r\n for (const key of module.keys) {\r\n const ids = owners.get(key);\r\n if (ids?.size === 1 && ids.has(module.id)) aliases.set(key, value);\r\n }\r\n }\r\n return aliases;\r\n}\r\n\r\nexport function resolveModuleReference<T>(target: string, aliases: Map<string, T>): T | null {\r\n // Module aliases are segment suffixes (for example `foo.bar` and `bar`).\r\n // Walk those suffixes directly instead of scanning every alias in the project\r\n // for every require expression. The first hit is necessarily the longest one.\r\n let candidate = target;\r\n while (true) {\r\n if (aliases.has(candidate)) return aliases.get(candidate)!;\r\n const separator = candidate.indexOf(\".\");\r\n if (separator < 0) return null;\r\n candidate = candidate.slice(separator + 1);\r\n }\r\n}\r\n",
13
13
  "import type { SyntaxNode } from \"../syntax\";\nimport { resolveLocalValue, unwrapExpression } from \"../ast/local-values\";\nimport { isNameShadowedBetween } from \"./helpers\";\nimport { moduleKeys, normalizeRequireTarget, resolveModuleReference } from \"../module-resolution\";\nimport { normalizeExpressionText, parameterBindingNames, rootIdentifier, sameNode } from \"../ast/walk\";\nimport type { FunctionInfo, RuleContext, SourceEffectModuleSummary, StateBinding } from \"../types\";\n\nexport type MutationValueOrigin =\n | { kind: \"props\"; name: string }\n | { kind: \"state\"; binding: StateBinding }\n | { kind: \"parameter\"; name: string }\n | { kind: \"fresh\" }\n | { kind: \"unknown\" };\n\ninterface ImportBinding {\n declaration: SyntaxNode;\n summary: SourceEffectModuleSummary;\n}\n\ninterface BindingLookup {\n node: SyntaxNode;\n expression: SyntaxNode | null;\n}\n\ninterface MutationAnalysis {\n currentSummary: SourceEffectModuleSummary | null;\n imports: Map<string, ImportBinding>;\n mutatingFactoryMembers: Set<string>;\n callIndexes: Map<number, ReadonlySet<number>>;\n originCache: Map<string, MutationValueOrigin>;\n}\n\nconst analysisCache = new WeakMap<RuleContext, MutationAnalysis>();\nconst EMPTY_INDEXES: ReadonlySet<number> = new Set<number>();\n\nfunction declarationParts(node: SyntaxNode): { names: string[]; expressions: SyntaxNode[] } {\n if (node.type !== \"variable_declaration\") return { names: [], expressions: [] };\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\n const variables = assignment?.namedChildren.find((child) => child.type === \"variable_list\")\n ?? node.namedChildren.find((child) => child.type === \"variable_list\");\n const expressions = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\n return {\n names: variables?.namedChildren.filter((child) => child.type === \"identifier\").map((child) => child.text) ?? [],\n expressions: expressions?.namedChildren ?? [],\n };\n}\n\nfunction assignmentParts(node: SyntaxNode): { names: string[]; expressions: SyntaxNode[] } {\n if (node.type !== \"assignment_statement\" || node.parent?.type === \"variable_declaration\") {\n return { names: [], expressions: [] };\n }\n const variables = node.namedChildren.find((child) => child.type === \"variable_list\");\n const expressions = node.namedChildren.find((child) => child.type === \"expression_list\");\n return {\n names: variables?.namedChildren.filter((child) => child.type === \"identifier\").map((child) => child.text) ?? [],\n expressions: expressions?.namedChildren ?? [],\n };\n}\n\nfunction expressionForName(node: SyntaxNode, name: string): SyntaxNode | null | undefined {\n const { names, expressions } = node.type === \"variable_declaration\" ? declarationParts(node) : assignmentParts(node);\n const index = names.indexOf(name);\n if (index < 0) return undefined;\n return expressions[index] ?? expressions[0] ?? null;\n}\n\nfunction currentModuleSummary(context: RuleContext): SourceEffectModuleSummary | null {\n for (const key of moduleKeys(context.relativePath)) {\n const summary = context.project.sourceEffects.get(key);\n if (summary) return summary;\n }\n return null;\n}\n\nfunction topLevelImports(context: RuleContext): Map<string, ImportBinding> {\n const result = new Map<string, ImportBinding>();\n for (const node of context.root.namedChildren) {\n if (node.type !== \"variable_declaration\") continue;\n const { names, expressions } = declarationParts(node);\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n if (expression?.type !== \"function_call\") continue;\n const match = expression.text.match(/^\\s*require\\s*\\((.*?)\\)\\s*$/s);\n if (!match) continue;\n const summary = resolveModuleReference(normalizeRequireTarget(match[1]), context.project.sourceEffects);\n if (summary) result.set(names[index], { declaration: node, summary });\n }\n }\n return result;\n}\n\nfunction analysisFor(context: RuleContext): MutationAnalysis {\n const cached = analysisCache.get(context);\n if (cached) return cached;\n const imports = topLevelImports(context);\n const mutatingFactoryMembers = new Set<string>();\n for (const { summary } of imports.values()) {\n if (summary.instanceFactories.size === 0) continue;\n for (const member of summary.mutatingMemberParameters.keys()) mutatingFactoryMembers.add(member);\n }\n const result: MutationAnalysis = {\n currentSummary: currentModuleSummary(context),\n imports,\n mutatingFactoryMembers,\n callIndexes: new Map(),\n originCache: new Map(),\n };\n analysisCache.set(context, result);\n return result;\n}\n\nfunction directChildContaining(block: SyntaxNode, node: SyntaxNode): SyntaxNode | null {\n for (const child of block.namedChildren) {\n if (child.startIndex <= node.startIndex && child.endIndex >= node.endIndex) return child;\n }\n return null;\n}\n\nfunction visibleBinding(name: string, node: SyntaxNode, owner: FunctionInfo): BindingLookup | null {\n let current: SyntaxNode | null = node;\n while (current && !sameNode(current, owner.node)) {\n if ((current.type === \"function_definition\" || current.type === \"function_declaration\")\n && parameterBindingNames(current.childForFieldName(\"parameters\")).includes(name)) {\n return { node: current, expression: null };\n }\n const parent: SyntaxNode | null = current.parent;\n if (parent?.type === \"block\") {\n const containing = directChildContaining(parent, node);\n const beforeIndex = containing?.startIndex ?? node.startIndex;\n const children = parent.namedChildren;\n for (let index = children.length - 1; index >= 0; index -= 1) {\n const child = children[index];\n if (child.startIndex >= beforeIndex) continue;\n if (child.type !== \"variable_declaration\" && child.type !== \"assignment_statement\") continue;\n const expression = expressionForName(child, name);\n if (expression !== undefined) return { node: child, expression };\n }\n }\n current = parent;\n }\n return null;\n}\n\nfunction isTopLevelFunctionVisible(context: RuleContext, name: string, owner: FunctionInfo): boolean {\n for (const node of context.root.namedChildren) {\n if (node.startIndex >= owner.node.startIndex) break;\n if (node.type === \"function_declaration\") {\n const declared = node.childForFieldName(\"name\")?.text.replace(/\\s+/g, \"\") ?? \"\";\n if (declared === name) return true;\n continue;\n }\n if (node.type !== \"variable_declaration\") continue;\n const { names, expressions } = declarationParts(node);\n const index = names.indexOf(name);\n if (index < 0) continue;\n if ((expressions[index] ?? expressions[0])?.type === \"function_definition\") return true;\n }\n return false;\n}\n\nfunction moduleBindingVisible(binding: ImportBinding, name: string, call: SyntaxNode, owner: FunctionInfo): boolean {\n if (binding.declaration.startIndex >= owner.node.startIndex) return false;\n if (owner.parameters.includes(name)) return false;\n return visibleBinding(name, call, owner) === null;\n}\n\nfunction builtinMutatedParameterIndexes(path: string, argumentCount: number): ReadonlySet<number> {\n switch (path) {\n case \"rawset\":\n case \"setmetatable\":\n case \"table.clear\":\n case \"table.freeze\":\n case \"table.insert\":\n case \"table.remove\":\n case \"table.sort\":\n return argumentCount > 0 ? new Set([0]) : EMPTY_INDEXES;\n case \"table.move\":\n return argumentCount >= 5 ? new Set([4]) : argumentCount > 0 ? new Set([0]) : EMPTY_INDEXES;\n default:\n return EMPTY_INDEXES;\n }\n}\n\nfunction importedFactorySummary(\n context: RuleContext,\n receiver: string,\n call: SyntaxNode,\n owner: FunctionInfo,\n analysis: MutationAnalysis,\n): SourceEffectModuleSummary | null {\n const binding = visibleBinding(receiver, call, owner);\n if (!binding?.expression) return null;\n const expression = binding.expression;\n if (expression.type === \"identifier\") {\n return importedFactorySummary(context, expression.text, expression, owner, analysis);\n }\n if (expression.type !== \"function_call\") return null;\n const path = normalizeExpressionText(context.getCallPath(expression) ?? \"\");\n const match = path.match(/^([A-Za-z_][A-Za-z0-9_]*)[.:]([A-Za-z_][A-Za-z0-9_]*)$/);\n if (!match) return null;\n const imported = analysis.imports.get(match[1]);\n if (!imported || !moduleBindingVisible(imported, match[1], expression, owner)) return null;\n return imported.summary.instanceFactories.has(match[2]) ? imported.summary : null;\n}\n\nexport function mightMutateParameters(context: RuleContext, call: SyntaxNode): boolean {\n const path = normalizeExpressionText(context.getCallPath(call) ?? \"\");\n if (builtinMutatedParameterIndexes(path, context.callArguments(call).length).size > 0) return true;\n\n const analysis = analysisFor(context);\n if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(path)) {\n if ((analysis.currentSummary?.localMutatingParameters.get(path)?.size ?? 0) > 0) return true;\n return (analysis.imports.get(path)?.summary.mutatingExportParameters.size ?? 0) > 0;\n }\n\n const member = path.match(/^([A-Za-z_][A-Za-z0-9_]*)[.:]([A-Za-z_][A-Za-z0-9_]*)$/);\n if (!member) return false;\n if ((analysis.imports.get(member[1])?.summary.mutatingMemberParameters.get(member[2])?.size ?? 0) > 0) return true;\n return analysis.mutatingFactoryMembers.has(member[2]);\n}\n\nexport function mutatedParameterIndexesForCall(\n context: RuleContext,\n call: SyntaxNode,\n owner: FunctionInfo,\n): ReadonlySet<number> {\n const analysis = analysisFor(context);\n const cached = analysis.callIndexes.get(call.id);\n if (cached) return cached;\n\n const path = normalizeExpressionText(context.getCallPath(call) ?? \"\");\n const builtin = builtinMutatedParameterIndexes(path, context.callArguments(call).length);\n if (builtin.size > 0) {\n analysis.callIndexes.set(call.id, builtin);\n return builtin;\n }\n\n let result: ReadonlySet<number> = EMPTY_INDEXES;\n if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(path)) {\n const importBinding = analysis.imports.get(path);\n if (importBinding && moduleBindingVisible(importBinding, path, call, owner)) {\n result = importBinding.summary.mutatingExportParameters;\n } else if (\n !owner.parameters.includes(path)\n && visibleBinding(path, call, owner) === null\n && isTopLevelFunctionVisible(context, path, owner)\n ) {\n result = analysis.currentSummary?.localMutatingParameters.get(path) ?? EMPTY_INDEXES;\n }\n } else {\n const member = path.match(/^([A-Za-z_][A-Za-z0-9_]*)([.:])([A-Za-z_][A-Za-z0-9_]*)$/);\n if (member) {\n const imported = analysis.imports.get(member[1]);\n if (imported && moduleBindingVisible(imported, member[1], call, owner)) {\n result = imported.summary.mutatingMemberParameters.get(member[3]) ?? EMPTY_INDEXES;\n } else {\n const factory = importedFactorySummary(context, member[1], call, owner, analysis);\n result = factory?.mutatingMemberParameters.get(member[3]) ?? EMPTY_INDEXES;\n }\n }\n }\n\n analysis.callIndexes.set(call.id, result);\n return result;\n}\n\nfunction freshExpression(context: RuleContext, expression: SyntaxNode): boolean {\n if (expression.type === \"table_constructor\" || expression.type === \"function_definition\") return true;\n if (expression.type !== \"function_call\") return false;\n const path = normalizeExpressionText(context.getCallPath(expression) ?? \"\");\n if (path === \"table.clone\" || path === \"table.create\" || path === \"table.pack\") return true;\n if (path === \"setmetatable\") {\n const first = context.callArguments(expression)[0];\n return Boolean(first && freshExpression(context, first));\n }\n return false;\n}\n\nfunction stateBindingForName(context: RuleContext, owner: FunctionInfo, name: string, bindingNode: SyntaxNode): StateBinding | null {\n return context.model.stateBindings.find((binding) =>\n binding.owner === owner && binding.valueName === name && sameNode(binding.declaration, bindingNode)\n ) ?? null;\n}\n\nfunction resolveNameOrigin(\n context: RuleContext,\n name: string,\n atNode: SyntaxNode,\n owner: FunctionInfo,\n seen: Set<string>,\n): MutationValueOrigin {\n const key = `${owner.node.id}:${name}:${atNode.startIndex}`;\n\n if (seen.has(key)) return { kind: \"unknown\" };\n\n seen.add(key);\n\n const binding = visibleBinding(name, atNode, owner);\n\n if (binding) {\n const state = stateBindingForName(context, owner, name, binding.node);\n\n if (state) return { kind: \"state\", binding: state };\n\n if (!binding.expression) return { kind: \"unknown\" };\n\n return resolveExpressionOriginInternal(\n context,\n binding.expression,\n owner,\n seen,\n );\n }\n\n if (owner.isComponent && owner.parameters[0] === name)\n return { kind: \"props\", name };\n\n if (\n owner.parameters.includes(name) &&\n !isNameShadowedBetween(atNode, owner, name)\n )\n return { kind: \"parameter\", name };\n\n return { kind: \"unknown\" };\n}\n\nfunction resolveExpressionOriginInternal(\n context: RuleContext,\n expression: SyntaxNode,\n owner: FunctionInfo,\n seen: Set<string>,\n): MutationValueOrigin {\n expression = unwrapExpression(expression);\n\n if (freshExpression(context, expression)) return { kind: \"fresh\" };\n\n if (\n [\"dot_index_expression\", \"bracket_index_expression\"].includes(\n expression.type,\n )\n ) {\n const base = expression.namedChildren[0];\n\n if (!base) return { kind: \"unknown\" };\n\n const origin = resolveExpressionOriginInternal(\n context,\n base,\n owner,\n new Set(seen),\n );\n\n if (origin.kind !== \"fresh\") return origin;\n\n const resolved = resolveLocalValue(context, base);\n\n if (\n resolved?.value.type === \"function_call\" &&\n context.getCallPath(resolved.value) === \"table.clone\"\n ) {\n // A shallow copy owns its fields but still references the original nested tables\n const path = normalizeExpressionText(expression.text);\n\n const reassigned =\n owner.body &&\n [...context.walk(owner.body)].some(\n (node) =>\n node.type === \"assignment_statement\" &&\n node.startIndex < expression.startIndex &&\n context.nearestFunction(node) === owner &&\n node.namedChildren\n .find((child) => child.type === \"variable_list\")\n ?.namedChildren.some(\n (target) => normalizeExpressionText(target.text) === path,\n ),\n );\n\n if (reassigned) return { kind: \"unknown\" };\n\n const argument = context.callArguments(resolved.value)[0];\n\n if (argument)\n return resolveExpressionOriginInternal(context, argument, owner, seen);\n }\n\n return origin;\n }\n\n const root = rootIdentifier(expression.text);\n\n if (!root) return { kind: \"unknown\" };\n\n return resolveNameOrigin(context, root, expression, owner, seen);\n}\n\nexport function mutationOriginForExpression(\n context: RuleContext,\n expression: SyntaxNode,\n owner: FunctionInfo,\n): MutationValueOrigin {\n const analysis = analysisFor(context);\n const key = `${owner.node.id}:${expression.id}`;\n const cached = analysis.originCache.get(key);\n if (cached) return cached;\n const result = resolveExpressionOriginInternal(context, expression, owner, new Set());\n analysis.originCache.set(key, result);\n return result;\n}\n",
@@ -16,7 +16,9 @@
16
16
  "import type { FixPreview } from \"../types\";\n\nconst examples: Record<string, FixPreview> = {\n \"react-luau/no-mutating-state-updater\": {\n before: `setItems(function(previous)\n\\ttable.insert(previous, item)\n\\treturn previous\nend)`,\n after: `setItems(function(previous)\n\\tlocal nextItems = table.clone(previous)\n\\ttable.insert(nextItems, item)\n\\treturn nextItems\nend)`,\n note: \"Copy any nested table being changed as well\",\n },\n\n \"react-luau/no-call-component-as-function\": {\n before: `local child = Child({ value = value })`,\n after: `local child = React.createElement(Child, { value = value })`,\n note: \"Give the child its own component identity and hook lifecycle\",\n },\n\n \"react-luau/no-create-binding-in-render\": {\n before: `local value, setValue = React.createBinding(0)`,\n after: `local value, setValue = React.useBinding(0)`,\n note: \"Keep the binding and updater stable across renders\",\n },\n\n \"react-luau/no-binding-getvalue-in-render\": {\n before: `Text = tostring(value:getValue())`,\n after: `Text = value:map(function(current)\n\\treturn tostring(current)\nend)`,\n note: \"Map the binding so later updates reach the prop\",\n },\n\n \"react-luau/usememo-must-return\": {\n before: `local result = React.useMemo(function()\n\\tcalculateValue(input)\nend, { input })`,\n after: `local result = React.useMemo(function()\n\\treturn calculateValue(input)\nend, { input })`,\n note: \"Return the calculated value instead of discarding it\",\n },\n\n \"react-luau/parse-error\": {\n before: `return React.createElement(\"Frame\", {\n\\tVisible = true,\n)`,\n after: `return React.createElement(\"Frame\", {\n\\tVisible = true,\n})`,\n note: \"Close the props table before closing the call. Parse errors can also come from unsupported syntax. Inspect the reported location before applying a repair.\",\n },\n\n \"react-luau/rules-of-hooks\": {\n before: `if enabled then\n\\tlocal value = React.useMemo(function()\n\\t\\treturn computeValue()\n\\tend, {})\nend`,\n after: `local value = React.useMemo(function()\n\\treturn computeValue()\nend, {})\n\nif enabled then\n\\t-- use value here\nend`,\n note: \"Keep hook calls at the top level, then branch on their results.\",\n },\n\n \"react-luau/exhaustive-deps\": {\n before: `React.useEffect(function()\n\\tprint(value)\nend, {})`,\n after: `React.useEffect(function()\n\\tprint(value)\nend, { value })`,\n note: \"Make the dependency table match the reactive values captured by the hook callback.\",\n },\n\n \"react-luau/effect-needs-cleanup\": {\n before: `React.useEffect(function()\n\\tlocal connection = signal:Connect(onChanged)\nend, { signal, onChanged })`,\n after: `React.useEffect(function()\n\\tlocal connection = signal:Connect(onChanged)\n\\treturn function()\n\\t\\tconnection:Disconnect()\n\\tend\nend, { signal, onChanged })`,\n note: \"Return cleanup from the same effect that creates the owned resource.\",\n },\n\n \"react-luau/no-derived-state-effect\": {\n before: `local value, setValue = React.useState(0)\n\nReact.useEffect(function()\n\\tsetValue(input * scale)\nend, { input, scale })`,\n after: `local value = input * scale`,\n note: \"Compute render-known derived values during render instead of synchronizing another state cell.\",\n },\n\n \"react-luau/no-self-updating-effect\": {\n before: `React.useEffect(function()\n\\tsetCount(count + 1)\nend, { count })`,\n after: `local function increment()\n\\tsetCount(function(previous)\n\\t\\treturn previous + 1\n\\tend)\nend`,\n note: \"Move the update to the event that owns it, or add a real convergence guard when an effect is required.\",\n },\n\n \"react-luau/no-effect-with-fresh-deps\": {\n before: `local options = { enabled = enabled }\n\nReact.useEffect(function()\n\\tapplyOptions(options)\nend, { options })`,\n after: `React.useEffect(function()\n\\tlocal options = { enabled = enabled }\n\\tapplyOptions(options)\nend, { enabled })`,\n note: \"Depend on stable reactive inputs rather than an object or function recreated every render.\",\n },\n\n \"react-luau/no-mutable-in-deps\": {\n before: `React.useEffect(function()\n\\tuseValue(ref.current)\nend, { ref.current })`,\n after: `React.useEffect(function()\n\\tuseValue(ref.current)\nend, {})`,\n note: \"This effect reads the ref after mount only. A ref mutation cannot schedule another effect. Use state or a subscription if changes must trigger work. Keep other reactive dependencies in the table.\",\n },\n\n \"react-luau/prefer-binding-over-state\": {\n before: `local value, setValue = React.useState(0)`,\n after: `local value, setValue = React.useBinding(0)`,\n note: \"Use a Binding when updates only need to flow into Binding-aware visual consumers.\",\n },\n\n \"react-luau/prefer-binding-over-state-candidate\": {\n before: `local value, setValue = React.useState(0)\nsignal:Connect(setValue)\n-- value is used for presentation`,\n after: `local value, setValue = React.useBinding(0)\nsignal:Connect(setValue)\n-- keep separate React state too if structure depends on it`,\n note: \"Use a Binding when this is really an external presentation stream. Keep or split React state when the event represents semantic UI state or needs reconciliation.\",\n },\n\n \"react-luau/rerender-unstable-memo-props\": {\n before: `return React.createElement(MemoizedButton, {\n\\tonClick = function()\n\\t\\tdoSomething()\n\\tend,\n})`,\n after: `local onClick = React.useCallback(function()\n\\tdoSomething()\nend, {})\n\nreturn React.createElement(MemoizedButton, {\n\\tonClick = onClick,\n})`,\n note: \"Stabilize identity only when the memoized child is worth skipping. Moving construction into the child or removing ineffective memoization can also be better.\",\n },\n\n \"react-luau/rerender-high-frequency-state\": {\n before: `local transparency, setTransparency = React.useState(0)\nReact.useEffect(function()\n\\tlocal connection = RunService.RenderStepped:Connect(function()\n\\t\\tsetTransparency(readTransparency())\n\\tend)\n\\treturn function() connection:Disconnect() end\nend, { readTransparency })\nreturn React.createElement(\"Frame\", {\n\\tBackgroundTransparency = transparency,\n})`,\n after: `local transparency, setTransparency = React.useBinding(0)\nReact.useEffect(function()\n\\tlocal connection = RunService.RenderStepped:Connect(function()\n\\t\\tsetTransparency(readTransparency())\n\\tend)\n\\treturn function() connection:Disconnect() end\nend, { readTransparency })\nreturn React.createElement(\"Frame\", {\n\\tBackgroundTransparency = transparency,\n})`,\n note: \"A Binding updates this host property without scheduling component renders. Keep state for values that control child structure, and keep the subscription cleanup.\",\n },\n\n \"react-luau/rerender-unnecessary-usememo\": {\n before: `local doubled = React.useMemo(function()\n\\treturn value * 2\nend, { value })`,\n after: `local doubled = value * 2`,\n note: \"Compute cheap derived values directly when stable identity is not observed.\",\n },\n\n \"react-luau/rerender-unnecessary-usecallback\": {\n before: `local functionName = React.useCallback(function()\n\\tdoSomething()\nend, {})`,\n after: `local function functionName()\n\\tdoSomething()\nend`,\n note: \"Use a normal local function when nothing observes the callback's identity.\",\n },\n\n \"react-luau/rerender-static-discovery-in-render\": {\n before: `local function Component()\n\\tlocal modules = ReplicatedStorage.Modules:GetChildren()\n\\treturn renderModules(modules)\nend`,\n after: `local modules = ReplicatedStorage.Modules:GetChildren()\n\nlocal function Component()\n\\treturn renderModules(modules)\nend`,\n note: \"Move truly static discovery to module scope. If the source can change, cache or subscribe to the real changing input instead.\",\n },\n\n \"react-luau/rerender-repeated-collection-scan\": {\n before: `for _, item in items do\n\\tbuildRow(item)\nend\n\nfor _, item in items do\n\\tbuildLookup(item)\nend`,\n after: `for _, item in items do\n\\tbuildRow(item)\n\\tbuildLookup(item)\nend`,\n note: \"Combine passes when they iterate the same collection and can safely share one traversal.\",\n },\n\n \"react-luau/rerender-static-state\": {\n before: `local value, setValue = React.useState(computeValue())\n-- setValue is never used`,\n after: `local valueRef = React.useRef(nil)\nif valueRef.current == nil then\n\\tvalueRef.current = computeValue()\nend\nlocal value = valueRef.current`,\n note: \"This preserves a pure, non-nil initial value without a state setter. Derive a local value directly only when recomputing on every render is intended.\",\n },\n\n \"react-luau/prefer-use-ref-for-mutable-cell\": {\n before: `local cell = React.useMemo(function()\n\\treturn { current = initialValue }\nend, {})`,\n after: `local cell = React.useRef(initialValue)`,\n note: \"useRef directly expresses a stable mutable current cell.\",\n },\n\n \"react-luau/rerender-functional-setstate\": {\n before: `setCount(count + 1)`,\n after: `setCount(function(previous)\n\\treturn previous + 1\nend)`,\n note: \"Use the previous value supplied by React when a retained callback computes the next state from old state.\",\n },\n\n \"react-luau/rerender-lazy-state-init\": {\n before: `local value, setValue = React.useState(buildExpensiveValue())`,\n after: `local value, setValue = React.useState(function()\n\\treturn buildExpensiveValue()\nend)`,\n note: \"Pass a lazy initializer function so expensive construction only runs when the state is first created.\",\n },\n\n \"react-luau/rerender-lazy-ref-init\": {\n before: `local valueRef = React.useRef(buildExpensiveValue())`,\n after: `local valueRef = React.useRef(nil)\nif valueRef.current == nil then\n\\tvalueRef.current = buildExpensiveValue()\nend`,\n note: \"Use nil-guarded lazy initialization only for pure construction. Owned resources with cleanup usually belong in an effect.\",\n },\n\n \"react-luau/rerender-state-only-in-handlers\": {\n before: `local value, setValue = React.useState(0)\n\nlocal function onInput()\n\\tprint(value)\nend`,\n after: `local valueRef = React.useRef(0)\n\nlocal function onInput()\n\\tprint(valueRef.current)\nend`,\n note: \"Use a ref when updates do not need to participate in rendering or hook dependencies.\",\n },\n\n \"react-luau/no-set-state-in-render\": {\n before: `local value, setValue = React.useState(0)\nsetValue(nextValue)`,\n after: `local value, setValue = React.useState(0)\n\nReact.useEffect(function()\n\\tsetValue(nextValue)\nend, { nextValue })`,\n note: \"Move the update to the event or effect that owns it. Prefer deriving the value directly when no state synchronization is needed.\",\n },\n\n \"react-luau/no-direct-state-mutation\": {\n before: `items[index] = nextItem\nsetItems(items)`,\n after: `local nextItems = table.clone(items)\nnextItems[index] = nextItem\nsetItems(nextItems)`,\n note: \"Create a new table identity before updating React state.\",\n },\n\n \"react-luau/no-ref-current-in-render\": {\n before: `latest.current = value`,\n after: `React.useEffect(function()\n\\tlatest.current = value\nend, { value })`,\n note: \"When committed-versus-uncommitted values matter, update the latest-value ref after commit.\",\n },\n\n \"react-luau/no-create-context-in-render\": {\n before: `local function Component()\n\\tlocal Context = React.createContext(nil)\n\\treturn React.createElement(Context.Provider)\nend`,\n after: `local Context = React.createContext(nil)\n\nlocal function Component()\n\\treturn React.createElement(Context.Provider)\nend`,\n note: \"Create the Context once at module scope so its identity is stable.\",\n },\n\n \"react-luau/no-nested-component-definition\": {\n before: `local function Parent()\n\\tlocal function Child()\n\\t\\treturn React.createElement(\"Frame\")\n\\tend\n\\treturn React.createElement(Child)\nend`,\n after: `local function Child()\n\\treturn React.createElement(\"Frame\")\nend\n\nlocal function Parent()\n\\treturn React.createElement(Child)\nend`,\n note: \"Move component definitions out of render so React sees a stable component identity.\",\n },\n\n \"react-luau/no-random-key\": {\n before: `React.createElement(Row, {\n\\tkey = HttpService:GenerateGUID(false),\n})`,\n after: `React.createElement(Row, {\n\\tkey = item.id,\n})`,\n note: \"Use identity that remains stable for the lifetime of the logical item.\",\n },\n\n \"react-luau/no-yield-in-render\": {\n before: `local function Component(props)\n\\tlocal result = props.remote:InvokeServer()\n\\treturn React.createElement(\"TextLabel\", { Text = tostring(result) })\nend`,\n after: `local function Component(props)\n\\tlocal result, setResult = React.useState(\"Loading...\")\n\\tReact.useEffect(function()\n\\t\\tlocal active = true\n\\t\\ttask.spawn(function()\n\\t\\t\\tlocal ok, value = pcall(function()\n\\t\\t\\t\\treturn props.remote:InvokeServer()\n\\t\\t\\tend)\n\\t\\t\\tif active then\n\\t\\t\\t\\tsetResult(if ok then tostring(value) else \"Request failed\")\n\\t\\t\\tend\n\\t\\tend)\n\\t\\treturn function() active = false end\n\\tend, { props.remote })\n\\treturn React.createElement(\"TextLabel\", { Text = result })\nend`,\n note: \"Start yielding work after commit and ignore stale results after cleanup. This does not cancel the server request. Production data loading may also need retries or request deduplication.\",\n },\n\n \"react-luau/no-task-spawn-in-render\": {\n before: `local function Component()\n\\ttask.spawn(doWork)\n\\treturn React.createElement(\"Frame\")\nend`,\n after: `local function Component()\n\\tReact.useEffect(function()\n\\t\\tlocal thread = task.spawn(doWork)\n\\t\\treturn function()\n\\t\\t\\tif coroutine.status(thread) ~= \"dead\" then\n\\t\\t\\t\\ttask.cancel(thread)\n\\t\\t\\tend\n\\t\\tend\n\\tend, { doWork })\n\\treturn React.createElement(\"Frame\")\nend`,\n note: \"Schedule work from the effect or event that owns the side effect, not while rendering.\",\n },\n\n \"react-luau/no-side-effects-in-render\": {\n before: `local connection = signal:Connect(onChanged)`,\n after: `React.useEffect(function()\n\\tlocal connection = signal:Connect(onChanged)\n\\treturn function()\n\\t\\tconnection:Disconnect()\n\\tend\nend, { signal, onChanged })`,\n note: \"Move imperative work into an owned effect with cleanup. Disconnect subscriptions, destroy owned Instances, and cancel tweens. Prefer React.createElement for React-owned Instances.\",\n },\n\n \"react-luau/no-create-root-in-render\": {\n before: `local function Component()\n\\tlocal root = ReactRoblox.createRoot(container)\n\\troot:render(element)\nend`,\n after: `local root = ReactRoblox.createRoot(container)\nroot:render(element)`,\n note: \"Create and own roots outside component render. A component should not imperatively create another React root while rendering.\",\n },\n\n \"react-luau/no-static-name-prop\": {\n before: `return React.createElement(\"Frame\", {}, {\n\\tChild = React.createElement(\"TextLabel\", {\n\\t\\tName = \"Label\",\n\\t}),\n})`,\n after: `return React.createElement(\"Frame\", {}, {\n\\tLabel = React.createElement(\"TextLabel\"),\n})`,\n note: \"The child table key names a static instance. Keep Name in props when the name must change dynamically.\",\n },\n\n \"react-luau/no-prop-mutation\": {\n before: `props.value = normalize(props.value)`,\n after: `local value = normalize(props.value)`,\n note: \"Treat props as immutable and derive a local value or update state in the owner.\",\n },\n\n \"react-luau/no-array-index-as-key\": {\n before: `for index, item in items do\n\\tchildren[index] = React.createElement(Row, {\n\\t\\tkey = index,\n\\t})\nend`,\n after: `for _, item in items do\n\\tchildren[item.id] = React.createElement(Row, {\n\\t\\tkey = item.id,\n\\t})\nend`,\n note: \"Use stable item identity when items can move. Keep positional identity only when replacing the occupant of a slot is intentional.\",\n },\n\n \"react-luau/unstable-context-value\": {\n before: `return React.createElement(Context.Provider, {\n\\tvalue = { user = user, theme = theme },\n})`,\n after: `local contextValue = React.useMemo(function()\n\\treturn { user = user, theme = theme }\nend, { user, theme })\n\nreturn React.createElement(Context.Provider, {\n\\tvalue = contextValue,\n})`,\n note: \"Memoize the provider value when consumer updates depend on table identity.\",\n },\n};\n\nexport function fixExampleForRule(ruleId: string): FixPreview | undefined {\n const example = examples[ruleId];\n\n return example ? { ...example, kind: example.kind ?? \"pattern\" } : undefined;\n}\n",
17
17
  "import type { SyntaxNode } from \"./syntax\";\r\nimport type { RuleContext } from \"./types\";\r\n\r\n/**\r\n * Engine members that are documented/known to yield. The analyzer intentionally\r\n * matches exact member names instead of every `*Async` function so custom\r\n * promise-style APIs do not become false positives merely because of naming.\r\n */\r\nconst YIELDING_ENGINE_MEMBERS = new Set([\r\n \"WaitForChild\",\r\n \"Wait\",\r\n \"GetAsync\",\r\n \"SetAsync\",\r\n \"UpdateAsync\",\r\n \"RemoveAsync\",\r\n \"IncrementAsync\",\r\n \"GetSortedAsync\",\r\n \"ListKeysAsync\",\r\n \"ListVersionsAsync\",\r\n \"GetVersionAsync\",\r\n \"PublishAsync\",\r\n \"SubscribeAsync\",\r\n \"RequestAsync\",\r\n \"PostAsync\",\r\n \"PreloadAsync\",\r\n \"ComputeAsync\",\r\n \"FilterStringAsync\",\r\n \"FilterStringForBroadcast\",\r\n \"FilterStringForPlayerAsync\",\r\n \"GetNonChatStringForBroadcastAsync\",\r\n \"GetNonChatStringForUserAsync\",\r\n \"GetChatForUserAsync\",\r\n \"AwardBadgeAsync\",\r\n \"UserHasBadgeAsync\",\r\n \"GetBadgeInfoAsync\",\r\n \"GetPolicyInfoForPlayerAsync\",\r\n \"GetTranslatorForPlayerAsync\",\r\n \"GetUserIdFromNameAsync\",\r\n \"GetNameFromUserIdAsync\",\r\n \"GetHumanoidDescriptionFromUserId\",\r\n \"GetHumanoidDescriptionFromOutfitId\",\r\n \"GetFriendsAsync\",\r\n \"GetUserThumbnailAsync\",\r\n \"GetUserInfosByUserIdsAsync\",\r\n \"GetGroupInfoAsync\",\r\n \"GetAlliesAsync\",\r\n \"GetEnemiesAsync\",\r\n \"GetGroupsAsync\",\r\n \"TeleportAsync\",\r\n \"ReserveServerAsync\",\r\n \"CreatePlaceAsync\",\r\n \"SavePlaceAsync\",\r\n \"LoadAsset\",\r\n \"LoadAssetVersion\",\r\n \"GetProductInfo\",\r\n \"CreateEditableImageAsync\",\r\n \"CreateEditableMeshAsync\",\r\n \"GetBundleDetailsAsync\",\r\n \"GetGamePlacesAsync\",\r\n \"GetDeveloperProductsAsync\",\r\n \"GetInventoryAsync\",\r\n \"GetItemDetailsAsync\",\r\n \"GetBatchItemDetailsAsync\",\r\n \"PromptCreateAssetAsync\",\r\n \"PromptImportAnimationClipFromVideoAsync\",\r\n \"GetAnimationClipAsync\",\r\n]);\r\n\r\nconst ROBLOX_MUTABLE_LEAFS = new Set([\r\n \"AbsolutePosition\",\r\n \"AbsoluteRotation\",\r\n \"AbsoluteSize\",\r\n \"AssemblyAngularVelocity\",\r\n \"AssemblyLinearVelocity\",\r\n \"CFrame\",\r\n \"Changed\",\r\n \"ContentSize\",\r\n \"CurrentCamera\",\r\n \"Enabled\",\r\n \"FocusLost\",\r\n \"Focused\",\r\n \"Heartbeat\",\r\n \"InputBegan\",\r\n \"InputChanged\",\r\n \"InputEnded\",\r\n \"Parent\",\r\n \"Position\",\r\n \"PreRender\",\r\n \"PreSimulation\",\r\n \"RenderStepped\",\r\n \"Rotation\",\r\n \"Size\",\r\n \"Stepped\",\r\n \"TextBounds\",\r\n \"Value\",\r\n \"ViewportSize\",\r\n \"WorldCFrame\",\r\n \"WorldPosition\",\r\n \"X\",\r\n \"Y\",\r\n]);\r\n\r\nconst INSTANCE_FACTORY_MEMBERS = new Set([\r\n \"Clone\",\r\n \"FindFirstAncestor\",\r\n \"FindFirstAncestorOfClass\",\r\n \"FindFirstAncestorWhichIsA\",\r\n \"FindFirstChild\",\r\n \"FindFirstChildOfClass\",\r\n \"FindFirstChildWhichIsA\",\r\n \"GetButton\",\r\n \"GetMouse\",\r\n \"GetService\",\r\n \"WaitForChild\",\r\n]);\r\n\r\nexport function finalCallMember(path: string): string {\r\n return path.split(/[.:]/).at(-1) ?? path;\r\n}\r\n\r\nfunction declarationInitializer(node: SyntaxNode, name: string): SyntaxNode | null | undefined {\r\n if (node.type !== \"variable_declaration\") return undefined;\r\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\r\n const variables = assignment?.namedChildren.find((child) => child.type === \"variable_list\")\r\n ?? node.namedChildren.find((child) => child.type === \"variable_list\");\r\n const expressions = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\r\n const names = variables?.namedChildren.filter((child) => child.type === \"identifier\") ?? [];\r\n const index = names.findIndex((candidate) => candidate.text === name);\r\n if (index < 0) return undefined;\r\n return expressions?.namedChildren[index] ?? expressions?.namedChildren[0] ?? null;\r\n}\r\n\r\nfunction functionBindsName(node: SyntaxNode, name: string): boolean {\r\n if (node.type !== \"function_definition\" && node.type !== \"function_declaration\") return false;\r\n const parameters = node.childForFieldName(\"parameters\");\r\n if (!parameters) return false;\r\n return parameters.namedChildren.some((parameter) =>\r\n parameter.namedChildren.some((child) => child.type === \"identifier\" && child.text === name)\r\n || (parameter.type === \"identifier\" && parameter.text === name)\r\n );\r\n}\r\n\r\nfunction loopBindsName(node: SyntaxNode, name: string): boolean {\r\n if (node.type !== \"for_statement\") return false;\r\n const header = node.text.split(/\\bdo\\b/s, 1)[0] ?? \"\";\r\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n return new RegExp(`^\\\\s*for\\\\s+(?:${escaped}\\\\s*=|[^\\\\n]*\\\\b${escaped}\\\\b[^\\\\n]*\\\\bin\\\\b)`, \"s\").test(header);\r\n}\r\n\r\nfunction visibleInitializer(name: string, from: SyntaxNode, context: RuleContext): SyntaxNode | null | undefined {\r\n let current: SyntaxNode | null = from.parent;\r\n while (current) {\r\n if (current.type === \"block\" || current.id === context.root.id) {\r\n const children = current.namedChildren;\r\n for (let index = children.length - 1; index >= 0; index -= 1) {\r\n const child = children[index];\r\n if (child.startIndex >= from.startIndex) continue;\r\n const initializer = declarationInitializer(child, name);\r\n if (initializer !== undefined) return initializer;\r\n if (child.type === \"function_declaration\") {\r\n const declared = child.childForFieldName(\"name\")?.text.replace(/\\s+/g, \"\") ?? \"\";\r\n if (declared === name) return null;\r\n }\r\n }\r\n }\r\n if (functionBindsName(current, name) || loopBindsName(current, name)) return null;\r\n current = current.parent;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction expressionHasRobloxOrigin(\r\n expression: SyntaxNode | null | undefined,\r\n from: SyntaxNode,\r\n context: RuleContext,\r\n seen: Set<string>,\r\n): boolean {\r\n if (!expression) return false;\r\n const normalized = expression.text.replace(/\\s+/g, \"\");\r\n if (/^(?:game|workspace|script)(?:[.:]|$)/.test(normalized) || /^Instance\\.new\\(/.test(normalized)) return true;\r\n\r\n const root = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\r\n if (!root || root === \"require\" || seen.has(root)) return false;\r\n if (expression.type !== \"identifier\" && expression.type !== \"function_call\") return false;\r\n\r\n seen.add(root);\r\n return expressionHasRobloxOrigin(visibleInitializer(root, from, context), from, context, seen);\r\n}\r\n\r\nfunction hasRobloxReceiver(path: string, call: SyntaxNode, context: RuleContext): boolean {\r\n const normalized = path.replace(/\\s+/g, \"\");\r\n if (/^(?:game|workspace|script)(?:[.:]|$)/.test(normalized)) return true;\r\n const root = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\r\n if (!root) return false;\r\n return expressionHasRobloxOrigin(visibleInitializer(root, call, context), call, context, new Set([root]));\r\n}\r\n\r\nconst runServiceCallCache = new WeakMap<RuleContext, Map<number, boolean>>();\r\nconst runServiceExpressionCache = new WeakMap<RuleContext, Map<number, boolean>>();\r\nconst highFrequencyRobloxCallCache = new WeakMap<RuleContext, Map<number, boolean>>();\r\nconst highFrequencyRobloxExpressionCache = new WeakMap<RuleContext, Map<number, boolean>>();\r\n\r\nfunction cachedNodeBoolean(\r\n cache: WeakMap<RuleContext, Map<number, boolean>>,\r\n context: RuleContext,\r\n node: SyntaxNode,\r\n compute: () => boolean,\r\n): boolean {\r\n let entries = cache.get(context);\r\n if (!entries) {\r\n entries = new Map<number, boolean>();\r\n cache.set(context, entries);\r\n }\r\n const cached = entries.get(node.id);\r\n if (cached !== undefined) return cached;\r\n const value = compute();\r\n entries.set(node.id, value);\r\n return value;\r\n}\r\n\r\nconst RUN_SERVICE_EVENTS = new Set([\r\n \"RenderStepped\",\r\n \"Heartbeat\",\r\n \"Stepped\",\r\n \"PreRender\",\r\n \"PreSimulation\",\r\n \"PostSimulation\",\r\n]);\r\n\r\nfunction expressionIsRunService(\r\n expression: SyntaxNode | null | undefined,\r\n from: SyntaxNode,\r\n context: RuleContext,\r\n seen: Set<string>,\r\n): boolean {\r\n if (!expression) return false;\r\n const normalized = expression.text.replace(/\\s+/g, \"\");\r\n if (/^game:GetService\\([\"']RunService[\"']\\)$/.test(normalized)) return true;\r\n if (expression.type !== \"identifier\") return false;\r\n const name = expression.text;\r\n if (seen.has(name)) return false;\r\n seen.add(name);\r\n return expressionIsRunService(visibleInitializer(name, from, context), from, context, seen);\r\n}\r\n\r\nfunction rootIsRunService(root: string, from: SyntaxNode, context: RuleContext): boolean {\r\n if (root === \"game\") return false;\r\n return expressionIsRunService(visibleInitializer(root, from, context), from, context, new Set([root]));\r\n}\r\n\r\nexport function isHighFrequencyRunServiceExpression(node: SyntaxNode, context: RuleContext): boolean {\r\n return cachedNodeBoolean(runServiceExpressionCache, context, node, () => {\r\n const normalized = node.text.replace(/\\s+/g, \"\");\r\n if (/^game:GetService\\([\"']RunService[\"']\\)\\.(?:RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation)$/.test(normalized)) {\r\n return true;\r\n }\r\n const match = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.(RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation)$/);\r\n return Boolean(match && RUN_SERVICE_EVENTS.has(match[2]) && rootIsRunService(match[1], node, context));\r\n });\r\n}\r\n\r\nexport function isHighFrequencyRunServiceCall(call: SyntaxNode, context: RuleContext): boolean {\r\n return cachedNodeBoolean(runServiceCallCache, context, call, () => {\r\n const normalized = (context.getCallPath(call) ?? \"\").replace(/\\s+/g, \"\");\r\n const direct = call.text.replace(/\\s+/g, \"\");\r\n if (/^game:GetService\\([\"']RunService[\"']\\)(?:\\.(?:RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation):Connect|:BindToRenderStep|:BindToSimulation)\\(/.test(direct)) {\r\n return true;\r\n }\r\n\r\n const event = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.(RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation):Connect$/);\r\n if (event) return rootIsRunService(event[1], call, context);\r\n\r\n const bind = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*):(?:BindToRenderStep|BindToSimulation)$/);\r\n return Boolean(bind && rootIsRunService(bind[1], call, context));\r\n });\r\n}\r\n\r\nconst HIGH_FREQUENCY_ROBLOX_EVENTS = new Set([\r\n \"InputChanged\",\r\n \"TouchMoved\",\r\n \"Move\",\r\n]);\r\n\r\nexport function isHighFrequencyRobloxExpression(node: SyntaxNode, context: RuleContext): boolean {\r\n return cachedNodeBoolean(highFrequencyRobloxExpressionCache, context, node, () => {\r\n if (isHighFrequencyRunServiceExpression(node, context)) return true;\r\n const normalized = node.text.replace(/\\s+/g, \"\");\r\n const match = normalized.match(/^(.+)\\.(InputChanged|TouchMoved|Move)$/);\r\n if (!match || !HIGH_FREQUENCY_ROBLOX_EVENTS.has(match[2])) return false;\r\n return hasRobloxReceiver(match[1], node, context);\r\n });\r\n}\r\n\r\nexport function isHighFrequencyRobloxCall(call: SyntaxNode, context: RuleContext): boolean {\r\n return cachedNodeBoolean(highFrequencyRobloxCallCache, context, call, () => {\r\n if (isHighFrequencyRunServiceCall(call, context)) return true;\r\n const normalized = (context.getCallPath(call) ?? \"\").replace(/\\s+/g, \"\");\r\n const event = normalized.match(/^(.+)\\.(InputChanged|TouchMoved|Move):Connect$/);\r\n if (!event || !HIGH_FREQUENCY_ROBLOX_EVENTS.has(event[2])) return false;\r\n return hasRobloxReceiver(event[1], call, context);\r\n });\r\n}\r\n\r\nexport function sourceHasHighFrequencyRunService(source: string): boolean {\r\n if (/game\\s*:\\s*GetService\\s*\\(\\s*[\"']RunService[\"']\\s*\\)\\s*(?:\\.\\s*(?:RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation)\\s*:\\s*Connect|:\\s*(?:BindToRenderStep|BindToSimulation))/.test(source)) {\r\n return true;\r\n }\r\n\r\n const aliases = new Set<string>();\r\n for (const match of source.matchAll(/\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*game\\s*:\\s*GetService\\s*\\(\\s*[\"']RunService[\"']\\s*\\)/g)) {\r\n aliases.add(match[1]);\r\n }\r\n for (const alias of aliases) {\r\n const escaped = alias.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n const pattern = new RegExp(`\\\\b${escaped}\\\\s*(?:\\\\.\\\\s*(?:RenderStepped|Heartbeat|Stepped|PreRender|PreSimulation|PostSimulation)\\\\s*:\\\\s*Connect|:\\\\s*(?:BindToRenderStep|BindToSimulation))`);\r\n if (pattern.test(source)) return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function sourceHasHighFrequencyRobloxEvent(source: string): boolean {\r\n if (sourceHasHighFrequencyRunService(source)) return true;\r\n\r\n if (/game\\s*:\\s*GetService\\s*\\(\\s*[\"']UserInputService[\"']\\s*\\)\\s*\\.\\s*(?:InputChanged|TouchMoved)\\s*:\\s*Connect/.test(source)) {\r\n return true;\r\n }\r\n\r\n const serviceAliases = new Set<string>();\r\n for (const match of source.matchAll(\r\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*game\\s*:\\s*GetService\\s*\\(\\s*[\"']UserInputService[\"']\\s*\\)/g,\r\n )) {\r\n serviceAliases.add(match[1]);\r\n }\r\n for (const alias of serviceAliases) {\r\n const escaped = alias.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n if (new RegExp(`\\\\b${escaped}\\\\s*\\\\.\\\\s*(?:InputChanged|TouchMoved)\\\\s*:\\\\s*Connect`).test(source)) {\r\n return true;\r\n }\r\n }\r\n\r\n const playersAliases = new Set<string>();\r\n for (const match of source.matchAll(\r\n /\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*game\\s*:\\s*GetService\\s*\\(\\s*[\"']Players[\"']\\s*\\)/g,\r\n )) {\r\n playersAliases.add(match[1]);\r\n }\r\n for (const players of playersAliases) {\r\n const escapedPlayers = players.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n for (const match of source.matchAll(\r\n new RegExp(`\\\\blocal\\\\s+([A-Za-z_][A-Za-z0-9_]*)\\\\s*=\\\\s*${escapedPlayers}\\\\s*\\\\.\\\\s*LocalPlayer\\\\s*:\\\\s*GetMouse\\\\s*\\\\(\\\\s*\\\\)`, \"g\"),\r\n )) {\r\n const mouse = match[1].replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n if (new RegExp(`\\\\b${mouse}\\\\s*\\\\.\\\\s*Move\\\\s*:\\\\s*Connect`).test(source)) return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport function knownYieldReason(path: string, call?: SyntaxNode, context?: RuleContext): string | null {\r\n const normalized = path.replace(/\\s+/g, \"\");\r\n if (normalized === \"task.wait\") return \"task.wait\";\r\n if (normalized === \"coroutine.yield\") return \"coroutine.yield\";\r\n\r\n const member = finalCallMember(normalized);\r\n if (!YIELDING_ENGINE_MEMBERS.has(member)) return null;\r\n if (!call || !context) return null;\r\n return hasRobloxReceiver(normalized, call, context) ? member : null;\r\n}\r\n\r\nexport function functionYieldPoint(node: SyntaxNode, context: RuleContext): { call: SyntaxNode; reason: string } | null {\r\n for (const candidate of context.walk(node)) {\r\n if (candidate.type !== \"function_call\") continue;\r\n const nearest = context.nearestFunction(candidate);\r\n const owner = context.model.functionByNode.get(node.id);\r\n if (owner && nearest !== owner) continue;\r\n const path = context.resolveCallPath(context.getCallPath(candidate) ?? \"\");\r\n const reason = knownYieldReason(path, candidate, context);\r\n if (reason) return { call: candidate, reason };\r\n }\r\n return null;\r\n}\r\n\r\nexport function isInstanceProducingExpression(node: SyntaxNode | undefined, context: RuleContext): boolean {\r\n if (!node) return false;\r\n\r\n const text = node.text.trim();\r\n if (/^(?:workspace|game|script)(?:\\.|:|$)/.test(text)) return true;\r\n\r\n for (const candidate of context.walk(node)) {\r\n if (candidate.type !== \"function_call\") continue;\r\n const path = context.resolveCallPath(context.getCallPath(candidate) ?? \"\");\r\n if (path === \"Instance.new\") return true;\r\n if (INSTANCE_FACTORY_MEMBERS.has(finalCallMember(path))) return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport function mutableDependencyBase(path: string, externallyMutableRoots: Set<string>): string | null {\r\n const normalized = path.replace(/\\s+/g, \"\");\r\n if (/\\.current(?:\\.|$)/.test(normalized)) return \"\";\r\n\r\n const segments = normalized.split(\".\");\r\n if (segments.length < 2) return null;\r\n\r\n if (externallyMutableRoots.has(segments[0])) return segments[0];\r\n\r\n const mutableIndex = segments.findIndex((segment, index) => index > 0 && ROBLOX_MUTABLE_LEAFS.has(segment));\r\n if (mutableIndex <= 0) return null;\r\n\r\n const ownerPath = segments.slice(0, mutableIndex).join(\".\");\r\n const mutableLeaf = segments[mutableIndex];\r\n const signalLike = /(?:Changed|Began|Ended|Focused|Heartbeat|Stepped|PreRender|PreSimulation)$/.test(mutableLeaf);\r\n const objectLike = /(?:instance|attachment|camera|mouse|frame|gui|part|value|humanoid|sound|tween|workspace|root|viewport)/i.test(ownerPath);\r\n return signalLike || objectLike ? ownerPath : null;\r\n}\r\n",
18
18
  "import type { SyntaxNode } from \"../syntax\";\r\nimport type { FixPreview, FunctionInfo, RuleContext, RuleDefinition, Severity } from \"../types\";\r\nimport { sameNode } from \"../ast/walk\";\r\nimport { functionYieldPoint } from \"../roblox-semantics\";\r\nimport { callNameNode, declarationNames, firstFunctionArgument, functionInfoForNode } from \"./helpers\";\r\n\r\ninterface Resource {\r\n call: SyntaxNode;\r\n label: string;\r\n variable: string | null;\r\n detail?: string;\r\n severity?: Severity;\r\n cleanupMatches(cleanupText: string, variable: string | null, call: SyntaxNode): boolean;\r\n}\r\n\r\nconst ALWAYS_MANAGED_METHOD = /:GiveTask$/;\r\nconst GENERIC_MANAGER_METHOD = /:(?:Add|AddTask|AddObject|Track)$/;\r\nconst MANAGER_ROOT = /(?:maid|trove|janitor|cleaner|cleanup|scope|bin|disposer)(?:$|[._])/i;\r\nconst CONNECTION_RETURNING_METHODS = new Set([\"BindToSimulation\", \"SubscribeAsync\", \"OnUpdate\"]);\r\n\r\nfunction escapeRegExp(value: string): string {\r\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n}\r\n\r\nfunction connectionOwnerExpression(rawPath: string): string | null {\r\n const connected = rawPath.match(/^(.*):Connect$/s)?.[1];\r\n if (!connected) return null;\r\n\r\n const signalMethod = connected.match(/^(.*):(?:GetPropertyChangedSignal|GetAttributeChangedSignal)\\s*\\(.*\\)$/s);\r\n if (signalMethod) return signalMethod[1]?.trim() || null;\r\n\r\n const eventProperty = connected.match(/^(.*)\\.[A-Za-z_][A-Za-z0-9_]*$/s);\r\n return eventProperty?.[1]?.trim() || null;\r\n}\r\n\r\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\r\n if (node.type !== \"variable_declaration\") return [];\r\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\r\n const expressionList = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\r\n return expressionList?.namedChildren ?? [];\r\n}\r\n\r\nfunction initializerCreatesInstance(initializer: SyntaxNode | undefined, context: RuleContext): boolean {\r\n if (!initializer) return false;\r\n for (const candidate of context.walk(initializer)) {\r\n if (candidate.type !== \"function_call\") continue;\r\n if (context.resolveCallPath(context.getCallPath(candidate) ?? \"\") === \"Instance.new\") return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction bodyDeclaresInstanceBefore(\r\n body: SyntaxNode | null,\r\n beforeIndex: number,\r\n expression: string,\r\n context: RuleContext,\r\n): boolean {\r\n if (!body) return false;\r\n for (const child of body.namedChildren) {\r\n if (child.startIndex >= beforeIndex) break;\r\n if (child.type !== \"variable_declaration\") continue;\r\n const names = declarationNames(child);\r\n const index = names.indexOf(expression);\r\n if (index === -1) continue;\r\n if (initializerCreatesInstance(declarationExpressions(child)[index], context)) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction isProvenInstanceExpression(\r\n expression: string | null,\r\n call: SyntaxNode,\r\n context: RuleContext,\r\n callback: FunctionInfo,\r\n): boolean {\r\n if (!expression || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(expression)) return false;\r\n const callbackInstances = context.model.instanceVariablesByFunction.get(callback.node.id);\r\n if (callbackInstances?.has(expression)) return true;\r\n if (bodyDeclaresInstanceBefore(callback.body, call.startIndex, expression, context)) return true;\r\n\r\n const effectOwner = context.nearestFunction(callback.node);\r\n if (effectOwner) {\r\n const ownerInstances = context.model.instanceVariablesByFunction.get(effectOwner.node.id);\r\n if (ownerInstances?.has(expression)) return true;\r\n }\r\n return Boolean(effectOwner && bodyDeclaresInstanceBefore(effectOwner.body, callback.node.startIndex, expression, context));\r\n}\r\n\r\nfunction cleanupDestroysExpression(cleanupText: string, expression: string): boolean {\r\n return new RegExp(`(?:^|[^A-Za-z0-9_])${escapeRegExp(expression)}\\\\s*:\\\\s*Destroy\\\\s*\\\\(`, \"s\").test(cleanupText);\r\n}\r\n\r\nfunction assignedVariableName(call: SyntaxNode, callback: FunctionInfo): string | null {\r\n let current = call.parent;\r\n while (current && !sameNode(current, callback.node)) {\r\n if (current.type === \"variable_declaration\") {\r\n const names = declarationNames(current);\r\n const expressions = declarationExpressions(current);\r\n const index = expressions.findIndex((expression) => expression.startIndex <= call.startIndex && expression.endIndex >= call.endIndex);\r\n if (index >= 0) return names[index] ?? names[0] ?? null;\r\n return names[0] ?? null;\r\n }\r\n if (current.type === \"assignment_statement\") {\r\n const beforeCall = current.text.slice(0, Math.max(0, call.startIndex - current.startIndex));\r\n const match = beforeCall.match(/^\\s*([A-Za-z_][A-Za-z0-9_]*(?:\\s*\\[[^\\]]+\\]|\\s*\\.[A-Za-z_][A-Za-z0-9_]*)*)\\s*=\\s*$/s);\r\n const target = match?.[1]?.replace(/\\s+/g, \"\") ?? \"\";\r\n const root = target.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\r\n if (root) return root;\r\n // A call can be nested inside a conditional/table initializer. In that case\r\n // keep walking so the surrounding variable declaration can own the resource.\r\n }\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return null;\r\n current = current.parent;\r\n }\r\n return null;\r\n}\r\n\r\nfunction cleanupIteratesAndDisconnects(cleanupText: string, collection: string): boolean {\r\n const escaped = escapeRegExp(collection);\r\n const loops = new RegExp(\r\n `for\\\\s+[^\\\\n]*?([A-Za-z_][A-Za-z0-9_]*)\\\\s+in\\\\s+${escaped}\\\\s+do([\\\\s\\\\S]*?)end`,\r\n \"g\",\r\n );\r\n for (const match of cleanupText.matchAll(loops)) {\r\n const item = match[1];\r\n const body = match[2] ?? \"\";\r\n if (new RegExp(`\\\\b${escapeRegExp(item)}\\\\s*:\\\\s*Disconnect\\\\s*\\\\(`).test(body)) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction cleanupCallsDisposer(cleanupText: string, variable: string): boolean {\r\n return new RegExp(`(?:^|[^A-Za-z0-9_.:])${escapeRegExp(variable)}\\\\s*\\\\(`, \"s\").test(cleanupText);\r\n}\r\n\r\nfunction isManagedByCleanupContainer(call: SyntaxNode, context: RuleContext, callback: FunctionInfo): boolean {\r\n let current = call.parent;\r\n while (current && !sameNode(current, callback.node)) {\r\n if (current.type === \"function_call\") {\r\n const path = context.getCallPath(current) ?? \"\";\r\n if (ALWAYS_MANAGED_METHOD.test(path)) return true;\r\n if (GENERIC_MANAGER_METHOD.test(path)) {\r\n const receiver = path.split(\":\", 1)[0] ?? \"\";\r\n if (MANAGER_ROOT.test(receiver)) return true;\r\n }\r\n }\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return false;\r\n current = current.parent;\r\n }\r\n return false;\r\n}\r\n\r\nfunction localFunctionByName(callback: FunctionInfo, name: string, context: RuleContext): SyntaxNode | null {\r\n if (!callback.body) return null;\r\n for (const child of callback.body.namedChildren) {\r\n if (child.type === \"function_declaration\" && child.childForFieldName(\"name\")?.text === name) return child;\r\n if (child.type !== \"variable_declaration\") continue;\r\n const match = child.text.match(new RegExp(`^\\\\s*local\\\\s+${escapeRegExp(name)}\\\\s*=\\\\s*function\\\\b`, \"s\"));\r\n if (!match) continue;\r\n return [...context.walk(child)].find((node) => node.type === \"function_definition\") ?? null;\r\n }\r\n return null;\r\n}\r\n\r\nfunction cleanupTexts(callback: FunctionInfo, context: RuleContext): string[] {\r\n if (!callback.body) return [];\r\n const texts: string[] = [];\r\n\r\n for (const node of context.walk(callback.body)) {\r\n if (node.type !== \"return_statement\") continue;\r\n if (context.nearestFunction(node) !== callback) continue;\r\n const expressionList = node.namedChildren.find((child) => child.type === \"expression_list\");\r\n const returned = expressionList?.namedChildren[0];\r\n if (!returned) continue;\r\n if (returned.type === \"function_definition\") {\r\n texts.push(returned.text);\r\n continue;\r\n }\r\n if (returned.type === \"identifier\") {\r\n const localFunction = localFunctionByName(callback, returned.text, context);\r\n if (localFunction) texts.push(localFunction.text);\r\n }\r\n }\r\n\r\n return texts;\r\n}\r\n\r\nfunction taskCallbackNode(call: SyntaxNode, context: RuleContext, callback: FunctionInfo): SyntaxNode | null {\r\n const args = context.callArguments(call);\r\n const candidate = args.find((arg) => arg.type === \"function_definition\");\r\n if (candidate) return candidate;\r\n const named = args[0];\r\n if (named?.type === \"identifier\") return localFunctionByName(callback, named.text, context);\r\n return null;\r\n}\r\n\r\nfunction cancellationFlagMatches(taskCallback: SyntaxNode | null, cleanupText: string, callback: FunctionInfo): boolean {\r\n if (!taskCallback || !callback.body) return false;\r\n const beforeTask = callback.body.text.slice(0, Math.max(0, taskCallback.startIndex - callback.body.startIndex));\r\n const declarations = [...beforeTask.matchAll(/\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*false\\b/g)].map((match) => match[1]);\r\n\r\n for (const name of declarations) {\r\n const escaped = escapeRegExp(name);\r\n if (!new RegExp(`\\\\b${escaped}\\\\s*=\\\\s*true\\\\b`).test(cleanupText)) continue;\r\n const taskText = taskCallback.text;\r\n const observesCancellation = new RegExp(`(?:if\\\\s+${escaped}\\\\s+then[\\\\s\\\\S]{0,120}?return|if\\\\s+not\\\\s+${escaped}\\\\s+then|while\\\\s+not\\\\s+${escaped}\\\\b|until\\\\s+${escaped}\\\\b)`, \"s\").test(taskText);\r\n if (observesCancellation) return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction connectionResource(call: SyntaxNode, variable: string | null, label = \"RBXScriptConnection\"): Resource {\r\n return {\r\n call,\r\n label,\r\n variable,\r\n cleanupMatches(text, name) {\r\n return Boolean(\r\n name\r\n && (new RegExp(`\\\\b${escapeRegExp(name)}\\\\s*:\\\\s*Disconnect\\\\s*\\\\(`).test(text)\r\n || cleanupIteratesAndDisconnects(text, name)),\r\n );\r\n },\r\n };\r\n}\r\n\r\nfunction numericTaskDelay(call: SyntaxNode, context: RuleContext): number | null {\r\n const first = context.callArguments(call)[0]?.text.trim();\r\n if (!first || !/^-?\\d+(?:\\.\\d+)?$/.test(first)) return null;\r\n const value = Number(first);\r\n return Number.isFinite(value) ? value : null;\r\n}\r\n\r\nfunction isCleanupOnlyTask(callbackNode: SyntaxNode | null, context: RuleContext): boolean {\r\n if (!callbackNode) return false;\r\n const info = functionInfoForNode(context, callbackNode);\r\n if (!info?.body) return false;\r\n const calls = [...context.walk(info.body)].filter((node) => node.type === \"function_call\" && context.nearestFunction(node) === info);\r\n if (calls.length === 0) return false;\r\n return calls.every((call) => /:(?:Destroy|Disconnect)$/.test(context.getCallPath(call) ?? \"\"));\r\n}\r\n\r\nfunction taskSeverity(path: string, call: SyntaxNode, taskCallback: SyntaxNode | null, yieldPoint: unknown, context: RuleContext): Severity {\r\n if (path === \"task.defer\" && !yieldPoint) return \"suggestion\";\r\n if (path === \"task.delay\" && !yieldPoint) {\r\n if (isCleanupOnlyTask(taskCallback, context)) return \"suggestion\";\r\n const delay = numericTaskDelay(call, context);\r\n if (delay !== null && delay <= 0.25) return \"suggestion\";\r\n }\r\n return \"warning\";\r\n}\r\n\r\nfunction cleanupHelp(resources: Resource[], details: string[]): string {\r\n const labels = new Set(resources.map((resource) => resource.label));\r\n let action: string;\r\n\r\n if (resources.every((resource) => resource.label.includes(\"task\"))) {\r\n action = \"Cancel the task in returned cleanup if it must stop with the effect.\";\r\n } else if (labels.size === 1 && labels.has(\"connection/subscription\")) {\r\n action = \"Disconnect the connection in returned cleanup, or hand it to a cleanup manager.\";\r\n } else if (labels.size === 1 && [...labels][0]?.endsWith(\" connection\")) {\r\n action = \"Disconnect the returned connection in cleanup.\";\r\n } else if (labels.size === 1 && labels.has(\"RenderStep binding\")) {\r\n action = \"Call UnbindFromRenderStep with the same binding name in cleanup.\";\r\n } else if (labels.size === 1 && labels.has(\"ContextAction binding\")) {\r\n action = \"Call UnbindAction with the same action name in cleanup.\";\r\n } else if (labels.size === 1 && labels.has(\"ContextAction activation binding\")) {\r\n action = \"Call UnbindActivate with the same input type in cleanup.\";\r\n } else if (labels.size === 1 && labels.has(\"React root\")) {\r\n action = \"Unmount the root in cleanup.\";\r\n } else {\r\n action = \"Release the owned resources in returned cleanup.\";\r\n }\r\n\r\n return `${details.length > 0 ? `${details.join(\" \")} ` : \"\"}${action}`;\r\n}\r\n\r\nfunction cleanupFixPreview(resources: Resource[], context: RuleContext): FixPreview | undefined {\r\n const labels = new Set(resources.map((resource) => resource.label));\r\n const first = resources[0];\r\n if (!first) return undefined;\r\n\r\n if (labels.size === 1 && labels.has(\"RenderStep binding\")) {\r\n const bindingName = context.callArguments(first.call)[0]?.text.trim() ?? '\"RenderStepName\"';\r\n return {\r\n kind: \"pattern\",\r\n before: `RunService:BindToRenderStep(${bindingName}, priority, onStep)`,\r\n after: `RunService:BindToRenderStep(${bindingName}, priority, onStep)\r\n\r\nreturn function()\r\n\tRunService:UnbindFromRenderStep(${bindingName})\r\nend`,\r\n note: \"Unbind the same RenderStep name when the effect reruns or unmounts.\",\r\n };\r\n }\r\n\r\n if ([...labels].every((label) => label.includes(\"task\"))) {\r\n const path = context.resolveCallPath(context.getCallPath(first.call) ?? \"task.delay\");\r\n const taskCall = path === \"task.defer\"\r\n ? `task.defer(function()\r\n\tdoWork()\r\nend)`\r\n : path === \"task.spawn\"\r\n ? `task.spawn(function()\r\n\tdoWork()\r\nend)`\r\n : `task.delay(delaySeconds, function()\r\n\tdoWork()\r\nend)`;\r\n return {\r\n kind: \"pattern\",\r\n before: taskCall,\r\n after: `local thread = ${taskCall}\r\n\r\nreturn function()\r\n\ttask.cancel(thread)\r\nend`,\r\n note: \"Cancel scheduled work only when it must not outlive this effect. Short fire-and-forget work may intentionally remain uncancelled.\",\r\n };\r\n }\r\n\r\n if (labels.size === 1 && labels.has(\"ContextAction binding\")) {\r\n return {\r\n kind: \"pattern\",\r\n before: `ContextActionService:BindAction(actionName, onAction, false, inputType)`,\r\n after: `ContextActionService:BindAction(actionName, onAction, false, inputType)\r\n\r\nreturn function()\r\n\tContextActionService:UnbindAction(actionName)\r\nend`,\r\n note: \"Unbind the same action name in the effect cleanup.\",\r\n };\r\n }\r\n\r\n if (labels.size === 1 && labels.has(\"React root\")) {\r\n return {\r\n kind: \"pattern\",\r\n before: `local root = ReactRoblox.createRoot(container)`,\r\n after: `local root = ReactRoblox.createRoot(container)\r\n\r\nreturn function()\r\n\troot:unmount()\r\nend`,\r\n note: \"Unmount roots created by the effect when ownership ends.\",\r\n };\r\n }\r\n\r\n return {\r\n kind: \"pattern\",\r\n before: `local connection = signal:Connect(onChanged)`,\r\n after: `local connection = signal:Connect(onChanged)\r\n\r\nreturn function()\r\n\tconnection:Disconnect()\r\nend`,\r\n note: \"Return cleanup from the same effect that acquires the resource.\",\r\n };\r\n}\r\n\r\nfunction classifyResource(call: SyntaxNode, context: RuleContext, callback: FunctionInfo): Resource | null {\r\n const rawPath = context.getCallPath(call) ?? \"\";\r\n const path = context.resolveCallPath(rawPath);\r\n const variable = assignedVariableName(call, callback);\r\n const finalMember = path.split(/[.:]/).at(-1) ?? path;\r\n\r\n if (/:Connect$/.test(rawPath)) {\r\n const ownerExpression = connectionOwnerExpression(rawPath);\r\n const ownerIsInstance = isProvenInstanceExpression(ownerExpression, call, context, callback);\r\n return {\r\n call,\r\n label: \"connection/subscription\",\r\n variable,\r\n cleanupMatches(text, name) {\r\n if (name && new RegExp(`\\\\b${escapeRegExp(name)}\\\\s*:\\\\s*Disconnect\\\\s*\\\\(`).test(text)) return true;\r\n if (name && cleanupIteratesAndDisconnects(text, name)) return true;\r\n // Custom Signal/Iris-style Connect APIs may return a disposer function instead of RBXScriptConnection.\r\n if (name && cleanupCallsDisposer(text, name)) return true;\r\n return Boolean(ownerIsInstance && ownerExpression && cleanupDestroysExpression(text, ownerExpression));\r\n },\r\n };\r\n }\r\n\r\n if (CONNECTION_RETURNING_METHODS.has(finalMember)) {\r\n return connectionResource(call, variable, `${finalMember} connection`);\r\n }\r\n\r\n if (/BindToRenderStep$/.test(rawPath)) {\r\n const bindingName = context.callArguments(call)[0]?.text.trim();\r\n return {\r\n call,\r\n label: \"RenderStep binding\",\r\n variable,\r\n cleanupMatches(text) {\r\n if (!/UnbindFromRenderStep\\s*\\(/.test(text)) return false;\r\n if (!bindingName) return true;\r\n return new RegExp(`UnbindFromRenderStep\\\\s*\\\\(\\\\s*${escapeRegExp(bindingName)}\\\\s*\\\\)`).test(text);\r\n },\r\n };\r\n }\r\n\r\n if (/:BindAction(?:AtPriority)?$/.test(rawPath)) {\r\n const actionName = context.callArguments(call)[0]?.text.trim();\r\n return {\r\n call,\r\n label: \"ContextAction binding\",\r\n variable,\r\n cleanupMatches(text) {\r\n if (/:UnbindAllActions\\s*\\(/.test(text)) return true;\r\n if (!/:UnbindAction\\s*\\(/.test(text)) return false;\r\n if (!actionName) return true;\r\n return new RegExp(`:UnbindAction\\\\s*\\\\(\\\\s*${escapeRegExp(actionName)}\\\\s*\\\\)`).test(text);\r\n },\r\n };\r\n }\r\n\r\n if (/:BindActivate$/.test(rawPath)) {\r\n const inputType = context.callArguments(call)[0]?.text.trim();\r\n return {\r\n call,\r\n label: \"ContextAction activation binding\",\r\n variable,\r\n cleanupMatches(text) {\r\n if (!/:UnbindActivate\\s*\\(/.test(text)) return false;\r\n if (!inputType) return true;\r\n return new RegExp(`:UnbindActivate\\\\s*\\\\(\\\\s*${escapeRegExp(inputType)}(?:\\\\s*,|\\\\s*\\\\))`).test(text);\r\n },\r\n };\r\n }\r\n\r\n if (path === \"ReactRoblox.createRoot\") {\r\n return {\r\n call,\r\n label: \"React root\",\r\n variable,\r\n cleanupMatches(text, name) {\r\n return Boolean(name && new RegExp(`\\\\b${escapeRegExp(name)}\\\\s*:\\\\s*unmount\\\\s*\\\\(`, \"i\").test(text));\r\n },\r\n };\r\n }\r\n\r\n if (path === \"task.delay\" || path === \"task.defer\" || path === \"task.spawn\") {\r\n const taskCallback = taskCallbackNode(call, context, callback);\r\n const yieldPoint = taskCallback ? functionYieldPoint(taskCallback, context) : null;\r\n const outlivesEffect = path !== \"task.spawn\" || Boolean(yieldPoint);\r\n if (!outlivesEffect) return null;\r\n\r\n return {\r\n call,\r\n label: path === \"task.spawn\" ? \"yielding spawned task\" : path === \"task.defer\" ? \"deferred task\" : \"delayed task\",\r\n detail: yieldPoint ? `The task can outlive the effect because it yields at ${yieldPoint.reason}.` : \"The task is scheduled to run after the effect callback can finish.\",\r\n severity: taskSeverity(path, call, taskCallback, yieldPoint, context),\r\n variable,\r\n cleanupMatches(text, name) {\r\n if (name) {\r\n const escaped = escapeRegExp(name);\r\n if (new RegExp(`task\\\\.cancel\\\\s*\\\\(\\\\s*${escaped}\\\\s*\\\\)`).test(text)) return true;\r\n if (new RegExp(`p?call\\\\s*\\\\(\\\\s*task\\\\.cancel\\\\s*,\\\\s*${escaped}\\\\s*\\\\)`).test(text)) return true;\r\n }\r\n return cancellationFlagMatches(taskCallback, text, callback);\r\n },\r\n };\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport const effectNeedsCleanup: RuleDefinition = {\r\n id: \"react-luau/effect-needs-cleanup\",\r\n category: \"Effects\",\r\n severity: \"warning\",\r\n description: \"Effects that create owned resources or outliving tasks should return matching cleanup.\",\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const rawPath = context.getCallPath(call);\r\n if (!rawPath) continue;\r\n const path = context.resolveCallPath(rawPath);\r\n if (path !== \"React.useEffect\" && path !== \"React.useLayoutEffect\") continue;\r\n\r\n const callbackNode = firstFunctionArgument(context, call);\r\n const callback = functionInfoForNode(context, callbackNode);\r\n if (!callbackNode || !callback) continue;\r\n const cleanup = cleanupTexts(callback, context);\r\n const missing: Resource[] = [];\r\n\r\n for (const candidate of context.walk(callbackNode)) {\r\n if (candidate.type !== \"function_call\") continue;\r\n if (context.nearestFunction(candidate) !== callback) continue;\r\n if (isManagedByCleanupContainer(candidate, context, callback)) continue;\r\n const resource = classifyResource(candidate, context, callback);\r\n if (!resource) continue;\r\n if (cleanup.some((text) => resource.cleanupMatches(text, resource.variable, resource.call))) continue;\r\n missing.push(resource);\r\n }\r\n\r\n if (missing.length === 0) continue;\r\n const labels = [...new Set(missing.map((resource) => resource.label))];\r\n const details = [...new Set(missing.map((resource) => resource.detail).filter((detail): detail is string => Boolean(detail)))];\r\n const severityRank: Record<Severity, number> = { suggestion: 0, warning: 1, error: 2 };\r\n const severity = missing.reduce<Severity>(\r\n (highest, resource) => severityRank[resource.severity ?? \"warning\"] > severityRank[highest] ? resource.severity ?? \"warning\" : highest,\r\n \"suggestion\",\r\n );\r\n const highlights = missing.map((resource) => callNameNode(resource.call));\r\n diagnostics.push({\r\n node: highlights[0],\r\n highlights,\r\n severity,\r\n message: `Effect creates ${labels.join(\", \")} without matching returned cleanup.`,\r\n help: cleanupHelp(missing, details),\r\n fixPreview: cleanupFixPreview(missing, context),\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
19
- "import type { SyntaxNode } from \"../syntax\";\r\nimport type { FunctionInfo, RuleContext, RuleDefinition } from \"../types\";\r\nimport { nodeKey, rootIdentifier } from \"../ast/walk\";\r\n\r\nimport {\r\n callNameNode,\r\n containsUnshadowedIdentifier,\r\n dependencyExpressions,\r\n functionInfoForNode,\r\n isEffectPath,\r\n parseDependencyRoots,\r\n stateBindingsFor,\r\n} from \"./helpers\";\r\n\r\nconst HOOKS_WITH_DEPS = new Set([\r\n \"React.useEffect\",\r\n \"React.useLayoutEffect\",\r\n \"React.useMemo\",\r\n \"React.useCallback\",\r\n \"React.useImperativeHandle\",\r\n]);\r\n\r\nfunction ownerForHook(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n): FunctionInfo | null {\r\n const owner = context.nearestFunction(call);\r\n\r\n return owner && (owner.isComponent || owner.isHook) ? owner : null;\r\n}\r\n\r\nfunction effectCallbackWithoutDeps(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n): SyntaxNode | null {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (!isEffectPath(path)) return null;\r\n\r\n const args = context.callArguments(call);\r\n const callback = args[0];\r\n\r\n if (callback?.type !== \"function_definition\") return null;\r\n\r\n if (args.length < 2 || args[1]?.type === \"nil\") return callback;\r\n\r\n return null;\r\n}\r\n\r\nfunction callbackAndDeps(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n): { callback: SyntaxNode; deps: SyntaxNode } | null {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n const args = context.callArguments(call);\r\n\r\n if (path === \"React.useImperativeHandle\") {\r\n const callback = args[1];\r\n const deps = args[2];\r\n\r\n if (\r\n callback?.type === \"function_definition\" &&\r\n deps?.type === \"table_constructor\"\r\n )\r\n return { callback, deps };\r\n\r\n return null;\r\n }\r\n\r\n const callback = args[0];\r\n const deps = args[1];\r\n\r\n if (\r\n callback?.type === \"function_definition\" &&\r\n deps?.type === \"table_constructor\"\r\n )\r\n return { callback, deps };\r\n\r\n return null;\r\n}\r\n\r\nfunction directTopLevelCalls(\r\n context: RuleContext,\r\n callback: SyntaxNode,\r\n): SyntaxNode[] {\r\n const info = functionInfoForNode(context, callback);\r\n\r\n if (!info?.body) return [];\r\n\r\n return info.body.namedChildren.filter(\r\n (child) => child.type === \"function_call\",\r\n );\r\n}\r\n\r\nfunction hasCall(node: SyntaxNode, context: RuleContext): boolean {\r\n for (const child of context.walk(node)) {\r\n if (child.type === \"function_call\") return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction hasExternalSubscription(\r\n node: SyntaxNode,\r\n context: RuleContext,\r\n): boolean {\r\n for (const child of context.walk(node)) {\r\n if (child.type !== \"function_call\") continue;\r\n\r\n const path = context.getCallPath(child) ?? \"\";\r\n\r\n if (\r\n /:Connect$/.test(path) ||\r\n /BindToRenderStep$/.test(path) ||\r\n /:BindAction(?:AtPriority)?$/.test(path)\r\n )\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction directLocalInitializer(\r\n owner: FunctionInfo,\r\n name: string,\r\n): SyntaxNode | null {\r\n if (!owner.body) return null;\r\n\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type !== \"variable_declaration\") continue;\r\n\r\n const assignment = statement.namedChildren.find(\r\n (child) => child.type === \"assignment_statement\",\r\n );\r\n\r\n const variableList = assignment?.namedChildren.find(\r\n (child) => child.type === \"variable_list\",\r\n );\r\n\r\n const expressionList = assignment?.namedChildren.find(\r\n (child) => child.type === \"expression_list\",\r\n );\r\n\r\n const names =\r\n variableList?.namedChildren.filter(\r\n (child) => child.type === \"identifier\",\r\n ) ?? [];\r\n\r\n const expressions = expressionList?.namedChildren ?? [];\r\n const index = names.findIndex((child) => child.text === name);\r\n\r\n if (index >= 0) return expressions[index] ?? expressions[0] ?? null;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction setterCalledOutsideCallback(\r\n context: RuleContext,\r\n owner: FunctionInfo,\r\n callback: SyntaxNode,\r\n setterName: string,\r\n): boolean {\r\n if (!owner.body) return false;\r\n\r\n for (const node of context.walk(owner.body)) {\r\n if (\r\n node.type !== \"function_call\" ||\r\n context.getCallPath(node) !== setterName\r\n )\r\n continue;\r\n\r\n if (\r\n node.startIndex >= callback.startIndex &&\r\n node.endIndex <= callback.endIndex\r\n )\r\n continue;\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction guaranteedRepeatedStateChange(\r\n argument: SyntaxNode,\r\n stateName: string,\r\n context: RuleContext,\r\n): boolean {\r\n if (argument.type === \"table_constructor\") return true;\r\n\r\n if (argument.type === \"function_definition\") {\r\n const updater = functionInfoForNode(context, argument);\r\n const previousName = updater?.parameters[0];\r\n\r\n const returnStatement = updater?.body?.namedChildren.find(\r\n (child) => child.type === \"return_statement\",\r\n );\r\n\r\n const returnValue = returnStatement?.namedChildren[0];\r\n\r\n if (\r\n previousName &&\r\n returnValue &&\r\n guaranteedRepeatedStateChange(returnValue, previousName, context)\r\n )\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n const text = argument.text.trim();\r\n const escaped = stateName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\n if (new RegExp(`^not\\\\s+${escaped}$`).test(text)) return true;\r\n\r\n if (\r\n new RegExp(\r\n `^${escaped}\\\\s*[+-]\\\\s*(?:[1-9]\\\\d*(?:\\\\.\\\\d+)?|0?\\\\.\\\\d*[1-9]\\\\d*)$`,\r\n ).test(text)\r\n )\r\n return true;\r\n\r\n if (\r\n new RegExp(\r\n `^(?:[1-9]\\\\d*(?:\\\\.\\\\d+)?|0?\\\\.\\\\d*[1-9]\\\\d*)\\\\s*\\\\+\\\\s*${escaped}$`,\r\n ).test(text)\r\n )\r\n return true;\r\n\r\n if (argument.type === \"function_call\") {\r\n const path = context.resolveCallPath(context.getCallPath(argument) ?? \"\");\r\n\r\n if (\r\n path === \"table.clone\" ||\r\n path === \"table.create\" ||\r\n path === \"table.pack\"\r\n )\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction freshDependencyKind(\r\n node: SyntaxNode,\r\n owner: FunctionInfo,\r\n): string | null {\r\n if (node.type === \"table_constructor\") return \"table\";\r\n\r\n if (node.type === \"function_definition\") return \"function\";\r\n\r\n if (node.type === \"identifier\") {\r\n const initializer = directLocalInitializer(owner, node.text);\r\n\r\n if (initializer?.type === \"table_constructor\") return \"table\";\r\n\r\n if (initializer?.type === \"function_definition\") return \"function\";\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport const noDerivedStateEffect: RuleDefinition = {\r\n id: \"react-luau/no-derived-state-effect\",\r\n category: \"Effects\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Avoid copying render-known derived values into state from an effect.\",\r\n\r\n guidance: {\r\n help: \"Calculate the value during render and remove the state setter. Keep the effect only if it does other work. Keep state if the delay is intentional.\",\r\n },\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (!isEffectPath(path)) continue;\r\n\r\n const owner = ownerForHook(context, call);\r\n const parts = callbackAndDeps(context, call);\r\n\r\n if (!owner || !parts) continue;\r\n\r\n if (hasExternalSubscription(parts.callback, context)) continue;\r\n\r\n const available =\r\n context.model.componentLocals.get(nodeKey(owner.node)) ??\r\n new Set(owner.parameters);\r\n\r\n const bindings = stateBindingsFor(context, owner);\r\n\r\n const setterToValue = new Map(\r\n bindings.map((binding) => [binding.setterName, binding.valueName]),\r\n );\r\n\r\n for (const setterCall of directTopLevelCalls(context, parts.callback)) {\r\n const setter = context.getCallPath(setterCall) ?? \"\";\r\n const targetState = setterToValue.get(setter);\r\n\r\n if (!targetState) continue;\r\n\r\n // If the setter is also used by handlers or other effects, the state has independent\r\n // ownership and is not merely a render-known derived copy.\r\n if (setterCalledOutsideCallback(context, owner, parts.callback, setter))\r\n continue;\r\n\r\n const argument = context.callArguments(setterCall)[0];\r\n\r\n if (\r\n !argument ||\r\n argument.type === \"function_definition\" ||\r\n hasCall(argument, context)\r\n )\r\n continue;\r\n\r\n const sourceNames = [...available].filter(\r\n (name) =>\r\n name !== targetState &&\r\n containsUnshadowedIdentifier(argument, name, context, owner),\r\n );\r\n\r\n if (sourceNames.length === 0) continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(setterCall),\r\n message: `${setter}() stores a value derived from ${sourceNames.slice(0, 3).join(\", \")} inside an effect.`,\r\n summary: `${targetState} can be calculated during render.`,\r\n explanation: `${setter} copies a value derived from ${sourceNames.slice(0, 3).join(\", \")} into state after render.`,\r\n help: \"Compute the value during render when it is fully derived from render-known inputs.\",\r\n\r\n fixPreview: {\r\n kind: \"pattern\" as const,\r\n before: setterCall.text,\r\n after: `local ${targetState} = ${argument.text}`,\r\n note: \"Remove the state pair and the setter call if the effect has no other work. Keep state when the delay is intentional.\",\r\n },\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const noSelfUpdatingEffect: RuleDefinition = {\r\n id: \"react-luau/no-self-updating-effect\",\r\n category: \"Effects\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Effects should not unconditionally update state in a way that schedules themselves again.\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (!isEffectPath(path)) continue;\r\n\r\n const owner = ownerForHook(context, call);\r\n\r\n if (!owner) continue;\r\n\r\n const parts = callbackAndDeps(context, call);\r\n\r\n if (parts) {\r\n const deps = parseDependencyRoots(parts.deps);\r\n\r\n for (const binding of stateBindingsFor(context, owner)) {\r\n if (!deps.has(binding.valueName)) continue;\r\n\r\n for (const setterCall of directTopLevelCalls(\r\n context,\r\n parts.callback,\r\n )) {\r\n if (context.getCallPath(setterCall) !== binding.setterName)\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(setterCall),\r\n message: `${binding.setterName}() updates ${binding.valueName}, which is also in this effect's dependency table.`,\r\n help: \"Guard the update so it converges, move it to the originating event, or derive the value during render.\",\r\n });\r\n }\r\n }\r\n\r\n continue;\r\n }\r\n\r\n const callback = effectCallbackWithoutDeps(context, call);\r\n\r\n if (!callback) continue;\r\n\r\n for (const binding of stateBindingsFor(context, owner)) {\r\n for (const setterCall of directTopLevelCalls(context, callback)) {\r\n if (context.getCallPath(setterCall) !== binding.setterName) continue;\r\n\r\n const argument = context.callArguments(setterCall)[0];\r\n\r\n if (\r\n !argument ||\r\n !guaranteedRepeatedStateChange(argument, binding.valueName, context)\r\n )\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(setterCall),\r\n message: `${binding.setterName}() unconditionally changes ${binding.valueName} in an effect that runs after every render.`,\r\n help: \"Add a dependency table or convergence guard, move the update to the event that owns it, or derive the value during render.\",\r\n });\r\n }\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const noEffectWithFreshDeps: RuleDefinition = {\r\n id: \"react-luau/no-effect-with-fresh-deps\",\r\n category: \"Hooks\",\r\n severity: \"error\",\r\n\r\n description:\r\n \"Dependency tables should not contain tables or functions recreated on every render.\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (!HOOKS_WITH_DEPS.has(path)) continue;\r\n\r\n const owner = ownerForHook(context, call);\r\n const parts = callbackAndDeps(context, call);\r\n\r\n if (!owner || !parts) continue;\r\n\r\n for (const dependency of dependencyExpressions(parts.deps)) {\r\n const kind = freshDependencyKind(dependency, owner);\r\n\r\n if (!kind) continue;\r\n\r\n const label =\r\n dependency.type === \"identifier\" ? ` ${dependency.text}` : \"\";\r\n\r\n diagnostics.push({\r\n node: dependency,\r\n message: `${path} depends on${label || \" an inline value\"} that is a new ${kind} on every render.`,\r\n help: \"Move the value inside the hook callback and depend on its simple inputs, or intentionally stabilize the value with useMemo/useCallback when identity is part of the contract.\",\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const noMutableInDeps: RuleDefinition = {\r\n id: \"react-luau/no-mutable-in-deps\",\r\n category: \"Hooks\",\r\n severity: \"error\",\r\n\r\n description:\r\n \"Mutable ref.current values do not belong in hook dependency tables.\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (!HOOKS_WITH_DEPS.has(path)) continue;\r\n\r\n const owner = ownerForHook(context, call);\r\n const parts = callbackAndDeps(context, call);\r\n\r\n if (!owner || !parts) continue;\r\n\r\n const refs =\r\n context.model.refVariablesByFunction.get(nodeKey(owner.node)) ??\r\n new Set<string>();\r\n\r\n for (const dependency of dependencyExpressions(parts.deps)) {\r\n const root = rootIdentifier(dependency.text);\r\n\r\n if (!root || !refs.has(root)) continue;\r\n\r\n if (\r\n !new RegExp(\r\n `^${root.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\s*\\\\.\\\\s*current\\\\b`,\r\n ).test(dependency.text.trim())\r\n )\r\n continue;\r\n\r\n diagnostics.push({\r\n node: dependency,\r\n message: `${dependency.text.trim()} is mutable ref state and will not itself trigger a React render when it changes.`,\r\n help: \"Read ref.current inside the hook body. Depend on reactive inputs that actually cause renders instead of listing the mutable current value.\",\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
19
+ "import type { SyntaxNode } from \"./syntax\";\nimport type { RuleContext } from \"./types\";\nimport {\n isUnboundIdentifier,\n localValueBinding,\n unwrapExpression,\n} from \"./ast/local-values\";\n\nexport interface ApiFunctionReference {\n returnType: string;\n allocation: \"new\" | \"argument\";\n equality: \"reference\" | \"value\" | \"unknown\";\n argumentIndex?: number;\n}\n\n// Return types alone do not describe equality or allocation\n// Keep these reviewed facts offline so editor diagnostics are deterministic\n// Sources: https://github.com/Roblox/creator-docs/tree/main/content/en-us/reference/engine\n// https://github.com/Roblox/react-luau/blob/main/modules/shared/src/objectIs.lua\nconst functions = new Map<string, ApiFunctionReference>();\n\nfunction register(\n namespace: string,\n members: string[],\n reference: ApiFunctionReference,\n): void {\n for (const member of members)\n functions.set(`${namespace}.${member}`, reference);\n}\n\nfor (const type of [\n \"Instance\",\n \"Random\",\n \"RaycastParams\",\n \"OverlapParams\",\n \"CatalogSearchParams\",\n \"SharedTable\",\n]) {\n register(type, [\"new\"], {\n returnType: type,\n allocation: \"new\",\n equality: \"reference\",\n });\n}\n\nregister(\"table\", [\"clone\", \"create\", \"pack\"], {\n returnType: \"table\",\n allocation: \"new\",\n equality: \"reference\",\n});\nregister(\"SharedTable\", [\"clone\", \"cloneAndFreeze\"], {\n returnType: \"SharedTable\",\n allocation: \"new\",\n equality: \"reference\",\n});\nregister(\"string\", [\"split\"], {\n returnType: \"table\",\n allocation: \"new\",\n equality: \"reference\",\n});\nregister(\"buffer\", [\"create\", \"fromstring\"], {\n returnType: \"buffer\",\n allocation: \"new\",\n equality: \"reference\",\n});\nregister(\"coroutine\", [\"create\"], {\n returnType: \"thread\",\n allocation: \"new\",\n equality: \"reference\",\n});\nregister(\"coroutine\", [\"wrap\"], {\n returnType: \"function\",\n allocation: \"new\",\n equality: \"reference\",\n});\nregister(\"table\", [\"freeze\"], {\n returnType: \"table\",\n allocation: \"argument\",\n equality: \"reference\",\n argumentIndex: 0,\n});\n\nfor (const [type, members] of Object.entries({\n Color3: [\"new\", \"fromRGB\", \"fromHSV\", \"fromHex\"],\n ColorSequence: [\"new\"],\n ColorSequenceKeypoint: [\"new\"],\n NumberSequence: [\"new\"],\n NumberSequenceKeypoint: [\"new\"],\n NumberRange: [\"new\"],\n UDim: [\"new\"],\n UDim2: [\"new\", \"fromScale\", \"fromOffset\"],\n Vector2: [\"new\"],\n Vector3: [\"new\", \"fromNormalId\", \"fromAxis\"],\n CFrame: [\n \"new\",\n \"Angles\",\n \"fromEulerAnglesXYZ\",\n \"fromEulerAnglesYXZ\",\n \"fromOrientation\",\n \"fromAxisAngle\",\n \"fromMatrix\",\n \"lookAt\",\n \"lookAlong\",\n ],\n Rect: [\"new\"],\n BrickColor: [\"new\", \"palette\"],\n})) {\n register(type, members, {\n returnType: type,\n allocation: \"new\",\n equality: \"value\",\n });\n}\n\nconst instanceMethods = new Map<string, ApiFunctionReference>([\n ...[\"GetChildren\", \"GetDescendants\", \"GetAttributes\", \"GetTags\"].map(\n (member): [string, ApiFunctionReference] => [\n member,\n { returnType: \"table\", allocation: \"new\", equality: \"reference\" },\n ],\n ),\n [\n \"Clone\",\n { returnType: \"Instance\", allocation: \"new\", equality: \"reference\" },\n ],\n]);\n\nexport function apiFunctionReference(\n path: string,\n): ApiFunctionReference | null {\n return functions.get(path) ?? null;\n}\n\nfunction globalPath(\n context: RuleContext,\n expression: SyntaxNode,\n seen = new Set<number>(),\n): string | null {\n const node = unwrapExpression(expression);\n\n if (seen.has(node.id)) return null;\n\n seen.add(node.id);\n\n if (node.type === \"identifier\") {\n if (isUnboundIdentifier(context, node)) return node.text;\n\n const binding = localValueBinding(context, node);\n\n return binding?.returnIndex === 0\n ? globalPath(context, binding.value, seen)\n : null;\n }\n\n if (node.type !== \"dot_index_expression\") return null;\n\n const namespace = node.childForFieldName(\"table\");\n const member = node.childForFieldName(\"field\");\n const path = namespace && globalPath(context, namespace, seen);\n\n return path && member ? `${path}.${member.text}` : null;\n}\n\nfunction isInstanceReceiver(\n context: RuleContext,\n expression: SyntaxNode,\n seen = new Set<number>(),\n): boolean {\n const node = unwrapExpression(expression);\n\n if (seen.has(node.id)) return false;\n\n seen.add(node.id);\n\n if (node.type === \"identifier\") {\n if (isUnboundIdentifier(context, node))\n return [\"game\", \"workspace\", \"script\"].includes(node.text);\n\n const binding = localValueBinding(context, node);\n\n return (\n binding?.returnIndex === 0 &&\n isInstanceReceiver(context, binding.value, seen)\n );\n }\n\n if (node.type === \"dot_index_expression\") {\n const receiver = node.childForFieldName(\"table\");\n\n return Boolean(receiver && isInstanceReceiver(context, receiver, seen));\n }\n\n if (node.type !== \"function_call\") return false;\n\n const name = node.childForFieldName(\"name\");\n\n if (!name) return false;\n\n if (globalPath(context, name) === \"Instance.new\") return true;\n\n if (name.type !== \"method_index_expression\") return false;\n\n const receiver = name.childForFieldName(\"table\");\n const member = name.childForFieldName(\"method\")?.text;\n\n return Boolean(\n receiver &&\n member &&\n [\n \"GetService\",\n \"WaitForChild\",\n \"FindFirstChild\",\n \"FindFirstAncestor\",\n \"Clone\",\n ].includes(member) &&\n isInstanceReceiver(context, receiver, seen),\n );\n}\n\nexport function apiReferenceForCall(\n context: RuleContext,\n call: SyntaxNode,\n): ApiFunctionReference | null {\n const name = call.childForFieldName(\"name\");\n\n if (!name) return null;\n\n const path = globalPath(context, name);\n\n if (path) return apiFunctionReference(path);\n\n if (name.type !== \"method_index_expression\") return null;\n\n const receiver = name.childForFieldName(\"table\");\n const member = name.childForFieldName(\"method\")?.text;\n\n return receiver && member && isInstanceReceiver(context, receiver)\n ? (instanceMethods.get(member) ?? null)\n : null;\n}\n",
20
+ "import type { SyntaxNode } from \"../syntax\";\nimport type { FunctionInfo, RuleContext } from \"../types\";\nimport { apiReferenceForCall } from \"../api-reference\";\nimport {\n resolveLocalFunction,\n resolveLocalValue,\n unwrapExpression,\n} from \"./local-values\";\n\nexport type FreshValueKind = \"table\" | \"function\" | \"object\";\n\n// Follow result expressions only: a fresh argument does not make its call result fresh\n// The lifetime changes when inspecting a factory, but module values stay stable\nexport function freshValueKind(\n context: RuleContext,\n expression: SyntaxNode | null,\n lifetime: FunctionInfo,\n seen = new Set<number>(),\n returnIndex = 0,\n lifetimes = new Set([lifetime]),\n): FreshValueKind | null {\n if (!expression) return null;\n\n const node = unwrapExpression(expression);\n\n if (seen.has(node.id) || seen.size >= 64) return null;\n\n const visited = new Set(seen).add(node.id);\n\n const analyze = (\n value: SyntaxNode | null,\n owner = lifetime,\n index = 0,\n ): FreshValueKind | null =>\n freshValueKind(\n context,\n value,\n owner,\n visited,\n index,\n new Set(lifetimes).add(owner),\n );\n\n if (node.type === \"identifier\") {\n const binding = resolveLocalValue(context, node);\n const owner = binding && context.nearestFunction(binding.value);\n\n if (!binding || !owner || !lifetimes.has(owner)) return null;\n\n return analyze(binding.value, lifetime, binding.returnIndex);\n }\n\n if (returnIndex === 0) {\n if (node.type === \"table_constructor\") return \"table\";\n\n if (\n node.type === \"function_definition\" ||\n node.type === \"function_declaration\"\n )\n return \"function\";\n\n if (node.type === \"binary_expression\") {\n const operator = node.children.find((child) =>\n [\"and\", \"or\"].includes(child.type),\n )?.type;\n\n if (operator === \"and\") return analyze(node.childForFieldName(\"right\"));\n\n if (operator === \"or\")\n return (\n analyze(node.childForFieldName(\"left\")) ??\n analyze(node.childForFieldName(\"right\"))\n );\n }\n\n if (node.type === \"if_expression\") {\n for (const branch of [\n node,\n ...node.namedChildren.filter((child) =>\n [\"elseif_clause\", \"else_clause\"].includes(child.type),\n ),\n ]) {\n const kind = analyze(branch.childForFieldName(\"consequence\"));\n\n if (kind) return kind;\n }\n }\n }\n\n if (node.type !== \"function_call\") return null;\n\n const api = apiReferenceForCall(context, node);\n\n if (api && returnIndex === 0) {\n if (api.allocation === \"argument\")\n return analyze(\n context.callArguments(node)[api.argumentIndex ?? 0] ?? null,\n );\n\n if (api.equality !== \"reference\") return null;\n\n return api.returnType === \"table\" || api.returnType === \"function\"\n ? api.returnType\n : \"object\";\n }\n\n const name = node.childForFieldName(\"name\");\n const factory = name && resolveLocalFunction(context, name);\n\n if (!factory?.body) return null;\n\n for (const statement of context.walk(factory.body)) {\n if (\n statement.type !== \"return_statement\" ||\n context.nearestFunction(statement) !== factory\n )\n continue;\n\n const values =\n statement.namedChildren.find((child) => child.type === \"expression_list\")\n ?.namedChildren ?? [];\n const value = values[returnIndex] ?? values.at(-1);\n\n if (!value) continue;\n\n const index = Math.max(0, returnIndex - values.length + 1);\n\n if (index > 0 && value.type !== \"function_call\") continue;\n\n const kind = analyze(value, factory, index);\n\n if (kind) return kind;\n }\n\n return null;\n}\n",
21
+ "import type { SyntaxNode } from \"../syntax\";\nimport type { FunctionInfo, RuleContext, RuleDefinition } from \"../types\";\nimport { nodeKey, rootIdentifier } from \"../ast/walk\";\nimport { freshValueKind } from \"../ast/value-identity\";\n\nimport {\n callNameNode,\n containsUnshadowedIdentifier,\n dependencyExpressions,\n functionInfoForNode,\n isEffectPath,\n parseDependencyRoots,\n stateBindingsFor,\n} from \"./helpers\";\n\nconst HOOKS_WITH_DEPS = new Set([\n \"React.useEffect\",\n \"React.useLayoutEffect\",\n \"React.useMemo\",\n \"React.useCallback\",\n \"React.useImperativeHandle\",\n]);\n\nfunction ownerForHook(\n context: RuleContext,\n call: SyntaxNode,\n): FunctionInfo | null {\n const owner = context.nearestFunction(call);\n\n return owner && (owner.isComponent || owner.isHook) ? owner : null;\n}\n\nfunction effectCallbackWithoutDeps(\n context: RuleContext,\n call: SyntaxNode,\n): SyntaxNode | null {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (!isEffectPath(path)) return null;\n\n const args = context.callArguments(call);\n const callback = args[0];\n\n if (callback?.type !== \"function_definition\") return null;\n\n if (args.length < 2 || args[1]?.type === \"nil\") return callback;\n\n return null;\n}\n\nfunction callbackAndDeps(\n context: RuleContext,\n call: SyntaxNode,\n): { callback: SyntaxNode; deps: SyntaxNode } | null {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n const args = context.callArguments(call);\n\n if (path === \"React.useImperativeHandle\") {\n const callback = args[1];\n const deps = args[2];\n\n if (\n callback?.type === \"function_definition\" &&\n deps?.type === \"table_constructor\"\n )\n return { callback, deps };\n\n return null;\n }\n\n const callback = args[0];\n const deps = args[1];\n\n if (\n callback?.type === \"function_definition\" &&\n deps?.type === \"table_constructor\"\n )\n return { callback, deps };\n\n return null;\n}\n\nfunction directTopLevelCalls(\n context: RuleContext,\n callback: SyntaxNode,\n): SyntaxNode[] {\n const info = functionInfoForNode(context, callback);\n\n if (!info?.body) return [];\n\n return info.body.namedChildren.filter(\n (child) => child.type === \"function_call\",\n );\n}\n\nfunction hasCall(node: SyntaxNode, context: RuleContext): boolean {\n for (const child of context.walk(node)) {\n if (child.type === \"function_call\") return true;\n }\n\n return false;\n}\n\nfunction hasExternalSubscription(\n node: SyntaxNode,\n context: RuleContext,\n): boolean {\n for (const child of context.walk(node)) {\n if (child.type !== \"function_call\") continue;\n\n const path = context.getCallPath(child) ?? \"\";\n\n if (\n /:Connect$/.test(path) ||\n /BindToRenderStep$/.test(path) ||\n /:BindAction(?:AtPriority)?$/.test(path)\n )\n return true;\n }\n\n return false;\n}\n\nfunction setterCalledOutsideCallback(\n context: RuleContext,\n owner: FunctionInfo,\n callback: SyntaxNode,\n setterName: string,\n): boolean {\n if (!owner.body) return false;\n\n for (const node of context.walk(owner.body)) {\n if (\n node.type !== \"function_call\" ||\n context.getCallPath(node) !== setterName\n )\n continue;\n\n if (\n node.startIndex >= callback.startIndex &&\n node.endIndex <= callback.endIndex\n )\n continue;\n\n return true;\n }\n\n return false;\n}\n\nfunction guaranteedRepeatedStateChange(\n argument: SyntaxNode,\n stateName: string,\n context: RuleContext,\n): boolean {\n if (argument.type === \"table_constructor\") return true;\n\n if (argument.type === \"function_definition\") {\n const updater = functionInfoForNode(context, argument);\n const previousName = updater?.parameters[0];\n\n const returnStatement = updater?.body?.namedChildren.find(\n (child) => child.type === \"return_statement\",\n );\n\n const returnValue = returnStatement?.namedChildren[0];\n\n if (\n previousName &&\n returnValue &&\n guaranteedRepeatedStateChange(returnValue, previousName, context)\n )\n return true;\n\n return false;\n }\n\n const text = argument.text.trim();\n const escaped = stateName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n if (new RegExp(`^not\\\\s+${escaped}$`).test(text)) return true;\n\n if (\n new RegExp(\n `^${escaped}\\\\s*[+-]\\\\s*(?:[1-9]\\\\d*(?:\\\\.\\\\d+)?|0?\\\\.\\\\d*[1-9]\\\\d*)$`,\n ).test(text)\n )\n return true;\n\n if (\n new RegExp(\n `^(?:[1-9]\\\\d*(?:\\\\.\\\\d+)?|0?\\\\.\\\\d*[1-9]\\\\d*)\\\\s*\\\\+\\\\s*${escaped}$`,\n ).test(text)\n )\n return true;\n\n if (argument.type === \"function_call\") {\n const path = context.resolveCallPath(context.getCallPath(argument) ?? \"\");\n\n if (\n path === \"table.clone\" ||\n path === \"table.create\" ||\n path === \"table.pack\"\n )\n return true;\n }\n\n return false;\n}\n\nexport const noDerivedStateEffect: RuleDefinition = {\n id: \"react-luau/no-derived-state-effect\",\n category: \"Effects\",\n severity: \"warning\",\n\n description:\n \"Avoid copying render-known derived values into state from an effect.\",\n\n guidance: {\n help: \"Calculate the value during render and remove the state setter. Keep the effect only if it does other work. Keep state if the delay is intentional.\",\n },\n\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (!isEffectPath(path)) continue;\n\n const owner = ownerForHook(context, call);\n const parts = callbackAndDeps(context, call);\n\n if (!owner || !parts) continue;\n\n if (hasExternalSubscription(parts.callback, context)) continue;\n\n const available =\n context.model.componentLocals.get(nodeKey(owner.node)) ??\n new Set(owner.parameters);\n\n const bindings = stateBindingsFor(context, owner);\n\n const setterToValue = new Map(\n bindings.map((binding) => [binding.setterName, binding.valueName]),\n );\n\n for (const setterCall of directTopLevelCalls(context, parts.callback)) {\n const setter = context.getCallPath(setterCall) ?? \"\";\n const targetState = setterToValue.get(setter);\n\n if (!targetState) continue;\n\n // If the setter is also used by handlers or other effects, the state has independent\n // ownership and is not merely a render-known derived copy.\n if (setterCalledOutsideCallback(context, owner, parts.callback, setter))\n continue;\n\n const argument = context.callArguments(setterCall)[0];\n\n if (\n !argument ||\n argument.type === \"function_definition\" ||\n hasCall(argument, context)\n )\n continue;\n\n const sourceNames = [...available].filter(\n (name) =>\n name !== targetState &&\n containsUnshadowedIdentifier(argument, name, context, owner),\n );\n\n if (sourceNames.length === 0) continue;\n\n diagnostics.push({\n node: callNameNode(setterCall),\n message: `${setter}() stores a value derived from ${sourceNames.slice(0, 3).join(\", \")} inside an effect.`,\n summary: `${targetState} can be calculated during render.`,\n explanation: `${setter} copies a value derived from ${sourceNames.slice(0, 3).join(\", \")} into state after render.`,\n help: \"Compute the value during render when it is fully derived from render-known inputs.\",\n\n fixPreview: {\n kind: \"pattern\" as const,\n before: setterCall.text,\n after: `local ${targetState} = ${argument.text}`,\n note: \"Remove the state pair and the setter call if the effect has no other work. Keep state when the delay is intentional.\",\n },\n });\n }\n }\n\n return diagnostics;\n },\n};\n\nexport const noSelfUpdatingEffect: RuleDefinition = {\n id: \"react-luau/no-self-updating-effect\",\n category: \"Effects\",\n severity: \"warning\",\n\n description:\n \"Effects should not unconditionally update state in a way that schedules themselves again.\",\n\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (!isEffectPath(path)) continue;\n\n const owner = ownerForHook(context, call);\n\n if (!owner) continue;\n\n const parts = callbackAndDeps(context, call);\n\n if (parts) {\n const deps = parseDependencyRoots(parts.deps);\n\n for (const binding of stateBindingsFor(context, owner)) {\n if (!deps.has(binding.valueName)) continue;\n\n for (const setterCall of directTopLevelCalls(\n context,\n parts.callback,\n )) {\n if (context.getCallPath(setterCall) !== binding.setterName)\n continue;\n\n diagnostics.push({\n node: callNameNode(setterCall),\n message: `${binding.setterName}() updates ${binding.valueName}, which is also in this effect's dependency table.`,\n help: \"Guard the update so it converges, move it to the originating event, or derive the value during render.\",\n });\n }\n }\n\n continue;\n }\n\n const callback = effectCallbackWithoutDeps(context, call);\n\n if (!callback) continue;\n\n for (const binding of stateBindingsFor(context, owner)) {\n for (const setterCall of directTopLevelCalls(context, callback)) {\n if (context.getCallPath(setterCall) !== binding.setterName) continue;\n\n const argument = context.callArguments(setterCall)[0];\n\n if (\n !argument ||\n !guaranteedRepeatedStateChange(argument, binding.valueName, context)\n )\n continue;\n\n diagnostics.push({\n node: callNameNode(setterCall),\n message: `${binding.setterName}() unconditionally changes ${binding.valueName} in an effect that runs after every render.`,\n help: \"Add a dependency table or convergence guard, move the update to the event that owns it, or derive the value during render.\",\n });\n }\n }\n }\n\n return diagnostics;\n },\n};\n\nexport const noEffectWithFreshDeps: RuleDefinition = {\n id: \"react-luau/no-effect-with-fresh-deps\",\n category: \"Hooks\",\n severity: \"error\",\n\n description:\n \"Dependency tables should not contain reference values recreated during render\",\n\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (!HOOKS_WITH_DEPS.has(path)) continue;\n\n const owner = ownerForHook(context, call);\n const parts = callbackAndDeps(context, call);\n\n if (!owner || !parts) continue;\n\n for (const dependency of dependencyExpressions(parts.deps)) {\n const kind = freshValueKind(context, dependency, owner);\n\n if (!kind) continue;\n\n const label =\n dependency.type === \"identifier\" ? ` ${dependency.text}` : \"\";\n\n diagnostics.push({\n node: dependency,\n message: `${path} depends on${label || \" an inline value\"} that can be a new ${kind} when the component renders`,\n help: \"Move the value inside the hook callback and depend on its simple inputs, or intentionally stabilize the value with useMemo/useCallback when identity is part of the contract\",\n });\n }\n }\n\n return diagnostics;\n },\n};\n\nexport const noMutableInDeps: RuleDefinition = {\n id: \"react-luau/no-mutable-in-deps\",\n category: \"Hooks\",\n severity: \"error\",\n\n description:\n \"Mutable ref.current values do not belong in hook dependency tables.\",\n\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (!HOOKS_WITH_DEPS.has(path)) continue;\n\n const owner = ownerForHook(context, call);\n const parts = callbackAndDeps(context, call);\n\n if (!owner || !parts) continue;\n\n const refs =\n context.model.refVariablesByFunction.get(nodeKey(owner.node)) ??\n new Set<string>();\n\n for (const dependency of dependencyExpressions(parts.deps)) {\n const root = rootIdentifier(dependency.text);\n\n if (!root || !refs.has(root)) continue;\n\n if (\n !new RegExp(\n `^${root.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\s*\\\\.\\\\s*current\\\\b`,\n ).test(dependency.text.trim())\n )\n continue;\n\n diagnostics.push({\n node: dependency,\n message: `${dependency.text.trim()} is mutable ref state and will not itself trigger a React render when it changes.`,\n help: \"Read ref.current inside the hook body. Depend on reactive inputs that actually cause renders instead of listing the mutable current value.\",\n });\n }\n }\n\n return diagnostics;\n },\n};\n",
20
22
  "import {\n reactApiPath,\n resolveLocalValue,\n unwrapExpression,\n} from \"../ast/local-values\";\nimport type { SyntaxNode } from \"../syntax\";\nimport type { RuleContext } from \"../types\";\n\nexport const HOOK_ARGUMENTS = new Map<\n string,\n { callbackIndex: number; depsIndex: number }\n>([\n [\"React.useEffect\", { callbackIndex: 0, depsIndex: 1 }],\n [\"React.useLayoutEffect\", { callbackIndex: 0, depsIndex: 1 }],\n [\"React.useMemo\", { callbackIndex: 0, depsIndex: 1 }],\n [\"React.useCallback\", { callbackIndex: 0, depsIndex: 1 }],\n [\"React.useImperativeHandle\", { callbackIndex: 1, depsIndex: 2 }],\n]);\n\nconst tableCache = new WeakMap<RuleContext, Map<number, SyntaxNode | null>>();\n\nexport function resolveDependencyTable(\n context: RuleContext,\n expression: SyntaxNode | undefined,\n): SyntaxNode | null {\n if (!expression) return null;\n\n const resolved = resolveLocalValue(context, expression);\n\n if (\n !resolved ||\n resolved.returnIndex !== 0 ||\n resolved.value.type !== \"table_constructor\"\n )\n return null;\n\n const table = resolved.value;\n\n if (unwrapExpression(expression).id === table.id) return table;\n\n let cache = tableCache.get(context);\n\n if (!cache) {\n cache = new Map();\n tableCache.set(context, cache);\n }\n\n if (cache.has(expression.id)) return cache.get(expression.id) ?? null;\n\n const refersToTable = (node: SyntaxNode) =>\n resolveLocalValue(context, node)?.value.id === table.id;\n let result: SyntaxNode | null = table;\n\n // Resolving a local proves its initial value, not that its contents stayed unchanged\n for (const node of context.walk()) {\n if (\n node.startIndex <= table.endIndex ||\n node.startIndex >= expression.startIndex\n )\n continue;\n\n if (\n node.type === \"assignment_statement\" ||\n node.type === \"update_statement\"\n ) {\n const targets =\n node.namedChildren.find((child) => child.type === \"variable_list\")\n ?.namedChildren ?? [];\n\n if (\n targets.some(\n (target) =>\n [\"dot_index_expression\", \"bracket_index_expression\"].includes(\n target.type,\n ) &&\n target.namedChildren[0] &&\n refersToTable(target.namedChildren[0]),\n )\n ) {\n result = null;\n break;\n }\n }\n\n if (node.type !== \"function_call\") continue;\n\n const name = node.childForFieldName(\"name\");\n const receiver =\n name?.type === \"method_index_expression\" ? name.namedChildren[0] : null;\n const shape = HOOK_ARGUMENTS.get(reactApiPath(context, node) ?? \"\");\n const args = context.callArguments(node);\n\n if (\n (receiver && refersToTable(receiver)) ||\n args.some(\n (arg, index) => refersToTable(arg) && index !== shape?.depsIndex,\n )\n ) {\n result = null;\n break;\n }\n }\n\n cache.set(expression.id, result);\n\n return result;\n}\n",
21
23
  "import type { SyntaxNode } from \"../syntax\";\r\nimport type { DiagnosticInput, FunctionInfo, RuleContext, RuleDefinition } from \"../types\";\r\nimport { nodeKey, normalizeExpressionText, parameterBindingNames, rootIdentifier, sameNode } from \"../ast/walk\";\r\nimport { mutableDependencyBase } from \"../roblox-semantics\";\r\nimport { declarationNames, dependencyExpressions, tableStartNode } from \"./helpers\";\r\nimport { HOOK_ARGUMENTS, resolveDependencyTable } from \"./dependency-tables\";\r\nimport { resolveLocalValue } from \"../ast/local-values\";\r\n\r\nconst GLOBALS = new Set([\r\n \"game\", \"workspace\", \"script\", \"shared\", \"Enum\", \"Instance\", \"task\", \"coroutine\", \"debug\", \"os\", \"utf8\", \"buffer\", \"bit32\",\r\n \"math\", \"string\", \"table\", \"pairs\", \"ipairs\", \"next\", \"pcall\", \"xpcall\", \"print\", \"warn\", \"error\", \"assert\", \"type\", \"typeof\",\r\n \"tonumber\", \"tostring\", \"select\", \"unpack\", \"rawget\", \"rawset\", \"rawequal\", \"setmetatable\", \"getmetatable\", \"Vector2\", \"Vector3\", \"UDim\",\r\n \"UDim2\", \"CFrame\", \"Color3\", \"BrickColor\", \"Rect\", \"Region3\", \"Ray\", \"TweenInfo\", \"NumberRange\", \"NumberSequence\", \"ColorSequence\",\r\n \"DateTime\", \"Random\", \"Axes\", \"Faces\", \"PhysicalProperties\", \"RaycastParams\", \"OverlapParams\", \"DockWidgetPluginGuiInfo\",\r\n]);\r\n\r\nfunction parameterNames(functionNode: SyntaxNode): Set<string> {\r\n return new Set(parameterBindingNames(functionNode.childForFieldName(\"parameters\")));\r\n}\r\n\r\nfunction* descendants(node: SyntaxNode): Iterable<SyntaxNode> {\r\n yield node;\r\n for (const child of node.namedChildren) yield* descendants(child);\r\n}\r\n\r\nconst TYPE_ONLY_NODES = new Set([\r\n \"type_definition\",\r\n \"type_annotation\",\r\n \"type_parameters\",\r\n \"generic_type_list\",\r\n \"generic_type\",\r\n \"function_type\",\r\n \"optional_type\",\r\n \"object_type\",\r\n \"union_type\",\r\n \"intersection_type\",\r\n \"tuple_type\",\r\n \"singleton_type\",\r\n \"variadic_type\",\r\n \"variadic_type_pack\",\r\n]);\r\n\r\nfunction isTypeOnlyChild(parent: SyntaxNode, child: SyntaxNode): boolean {\r\n if (TYPE_ONLY_NODES.has(child.type)) return true;\r\n if (TYPE_ONLY_NODES.has(parent.type)) return true;\r\n\r\n if (parent.type === \"parameter\") {\r\n return !sameNode(parent.namedChildren.find((candidate) => candidate.type === \"identifier\"), child);\r\n }\r\n\r\n if (parent.type === \"cast_expression\" || parent.type === \"type_cast_expression\") {\r\n return !sameNode(parent.namedChildren[0], child);\r\n }\r\n\r\n if (parent.type === \"function_definition\" || parent.type === \"function_declaration\") {\r\n const name = parent.childForFieldName(\"name\");\r\n const parameters = parent.childForFieldName(\"parameters\");\r\n const body = parent.childForFieldName(\"body\");\r\n if (sameNode(child, name) || sameNode(child, parameters) || sameNode(child, body)) return false;\r\n return true;\r\n }\r\n\r\n if (parent.type === \"variable_list\" && parent.parent?.parent?.type === \"variable_declaration\") {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction* runtimeDescendants(node: SyntaxNode): Iterable<SyntaxNode> {\r\n yield node;\r\n for (const child of node.namedChildren) {\r\n if (isTypeOnlyChild(node, child)) continue;\r\n yield* runtimeDescendants(child);\r\n }\r\n}\r\n\r\nfunction directBlockBindingNames(block: SyntaxNode, beforeIndex: number): Set<string> {\r\n const names = new Set<string>();\r\n for (const child of block.namedChildren) {\r\n if (child.startIndex >= beforeIndex) continue;\r\n if (child.type === \"variable_declaration\") {\r\n for (const name of declarationNames(child)) names.add(name);\r\n } else if (child.type === \"function_declaration\") {\r\n const name = child.childForFieldName(\"name\")?.text;\r\n if (name && /^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) names.add(name);\r\n }\r\n }\r\n return names;\r\n}\r\n\r\nfunction loopBindingNames(loop: SyntaxNode): Set<string> {\r\n const names = new Set<string>();\r\n const header = loop.text.split(/\\bdo\\b/s, 1)[0] ?? \"\";\r\n const numeric = header.match(/^\\s*for\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=/s);\r\n if (numeric) names.add(numeric[1]);\r\n const generic = header.match(/^\\s*for\\s+(.+?)\\s+in\\b/s);\r\n if (generic) {\r\n for (const part of generic[1].split(\",\")) {\r\n const name = part.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\r\n if (name) names.add(name);\r\n }\r\n }\r\n return names;\r\n}\r\n\r\nfunction isLocallyBoundOccurrence(identifier: SyntaxNode, callback: SyntaxNode, name: string): boolean {\r\n if (parameterNames(callback).has(name)) return true;\r\n\r\n let current = identifier.parent;\r\n while (current && !sameNode(current, callback)) {\r\n if ((current.type === \"function_definition\" || current.type === \"function_declaration\") && parameterNames(current).has(name)) {\r\n return true;\r\n }\r\n if (current.type === \"block\" && directBlockBindingNames(current, identifier.startIndex).has(name)) return true;\r\n if (current.type === \"for_statement\" && loopBindingNames(current).has(name)) return true;\r\n current = current.parent;\r\n }\r\n return false;\r\n}\r\n\r\nfunction isPropertyName(node: SyntaxNode): boolean {\r\n const parent = node.parent;\r\n if (!parent) return false;\r\n if (parent.type === \"dot_index_expression\") return sameNode(parent.childForFieldName(\"field\"), node);\r\n if (parent.type === \"method_index_expression\") return sameNode(parent.childForFieldName(\"method\"), node) || sameNode(parent.namedChildren.at(-1), node);\r\n // `fieldName = value` uses fieldName as a table key, not as a captured value.\r\n // Without this, a coincidentally named component local can create a fake dep.\r\n if (parent.type === \"field\" && !parent.text.trim().startsWith(\"[\")) {\r\n return sameNode(parent.childForFieldName(\"name\"), node);\r\n }\r\n return false;\r\n}\r\n\r\nfunction outermostDotPath(node: SyntaxNode): boolean {\r\n const parent = node.parent;\r\n return !(parent?.type === \"dot_index_expression\" && sameNode(parent.namedChildren[0], node));\r\n}\r\n\r\nfunction rootIdentifierNode(node: SyntaxNode, root: string): SyntaxNode | null {\r\n for (const candidate of descendants(node)) {\r\n if (candidate.type !== \"identifier\" || candidate.text !== root) continue;\r\n if (isPropertyName(candidate)) continue;\r\n return candidate;\r\n }\r\n return null;\r\n}\r\n\r\nfunction normalizeCapturedPath(\r\n path: string,\r\n stableVariables: Set<string>,\r\n externallyMutableRoots: Set<string>,\r\n): string | null {\r\n const normalized = normalizeExpressionText(path);\r\n const root = rootIdentifier(normalized);\r\n if (!root) return normalized;\r\n\r\n const mutableBase = mutableDependencyBase(normalized, externallyMutableRoots);\r\n if (mutableBase === \"\") return null;\r\n if (mutableBase) {\r\n const baseRoot = rootIdentifier(mutableBase);\r\n if (baseRoot && stableVariables.has(baseRoot)) return null;\r\n return mutableBase;\r\n }\r\n\r\n return normalized;\r\n}\r\n\r\nfunction capturedDependencyPaths(\r\n callback: SyntaxNode,\r\n available: Set<string>,\r\n stableVariables: Set<string>,\r\n externallyMutableRoots: Set<string>,\r\n context: RuleContext,\r\n): Set<string> {\r\n const captured = new Set<string>();\r\n const owner = context.nearestFunction(callback);\r\n\r\n const isRenderBinding = (identifier: SyntaxNode): boolean => {\r\n const resolved = resolveLocalValue(context, identifier);\r\n\r\n return !resolved || context.nearestFunction(resolved.value) === owner;\r\n };\r\n\r\n for (const node of runtimeDescendants(callback)) {\r\n if (node.type === \"dot_index_expression\" && outermostDotPath(node)) {\r\n const root = rootIdentifier(node.text);\r\n if (!root || !available.has(root) || GLOBALS.has(root) || stableVariables.has(root)) continue;\r\n const rootNode = rootIdentifierNode(node, root);\r\n if (!rootNode || isLocallyBoundOccurrence(rootNode, callback, root)) continue;\r\n if (!isRenderBinding(rootNode)) continue;\r\n const capture = normalizeCapturedPath(node.text, stableVariables, externallyMutableRoots);\r\n if (capture) captured.add(capture);\r\n continue;\r\n }\r\n\r\n if (node.type !== \"identifier\" || isPropertyName(node)) continue;\r\n const parent = node.parent;\r\n if (parent?.type === \"dot_index_expression\" && sameNode(parent.namedChildren[0], node)) continue;\r\n const name = node.text;\r\n if (!available.has(name) || GLOBALS.has(name) || stableVariables.has(name)) continue;\r\n if (isLocallyBoundOccurrence(node, callback, name)) continue;\r\n if (!isRenderBinding(node)) continue;\r\n captured.add(name);\r\n }\r\n\r\n return captured;\r\n}\r\n\r\nfunction localFunctionNode(owner: FunctionInfo, name: string, context: RuleContext): SyntaxNode | null {\r\n if (!owner.body) return null;\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type === \"function_declaration\" && statement.childForFieldName(\"name\")?.text === name) return statement;\r\n if (statement.type !== \"variable_declaration\" || !declarationNames(statement).includes(name)) continue;\r\n const prefix = statement.text.split(\"=\", 1)[0] ?? \"\";\r\n if (!new RegExp(`\\b${name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\b`).test(prefix)) continue;\r\n const fn = [...context.walk(statement)].find((node) => node.type === \"function_definition\");\r\n if (fn) return fn;\r\n }\r\n return null;\r\n}\r\n\r\nfunction expandLocalFunctionCaptures(\r\n captured: Set<string>,\r\n owner: FunctionInfo,\r\n available: Set<string>,\r\n stableVariables: Set<string>,\r\n externallyMutableRoots: Set<string>,\r\n context: RuleContext,\r\n): Set<string> {\r\n const result = new Set<string>();\r\n const visiting = new Set<string>();\r\n\r\n const addCapture = (capture: string): void => {\r\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(capture)) {\r\n result.add(capture);\r\n return;\r\n }\r\n const fn = localFunctionNode(owner, capture, context);\r\n if (visiting.has(capture)) return;\r\n if (!fn) {\r\n result.add(capture);\r\n return;\r\n }\r\n\r\n visiting.add(capture);\r\n const inner = capturedDependencyPaths(fn, available, stableVariables, externallyMutableRoots, context);\r\n for (const dependency of inner) addCapture(dependency);\r\n visiting.delete(capture);\r\n };\r\n\r\n for (const capture of captured) addCapture(capture);\r\n return result;\r\n}\r\n\r\nfunction dependencyCoveragePath(node: SyntaxNode): string {\r\n if (node.type === \"cast_expression\" || node.type === \"type_cast_expression\" || node.type === \"parenthesized_expression\") {\r\n const expression = node.namedChildren[0];\r\n if (expression) return dependencyCoveragePath(expression);\r\n }\r\n\r\n if (node.type === \"binary_expression\") {\r\n const left = node.childForFieldName(\"left\") ?? node.namedChildren[0];\r\n const right = node.childForFieldName(\"right\") ?? node.namedChildren[1];\r\n const isOr = node.children.some((child) => child.type === \"or\");\r\n if (isOr && left && right?.type === \"false\") return dependencyCoveragePath(left);\r\n }\r\n\r\n return normalizeExpressionText(node.text);\r\n}\r\n\r\nfunction dependencyPaths(node: SyntaxNode): Set<string> {\r\n return new Set(dependencyExpressions(node).map(dependencyCoveragePath));\r\n}\r\n\r\nfunction transparentAliasPath(node: SyntaxNode): string | null {\r\n if (node.type === \"cast_expression\" || node.type === \"type_cast_expression\" || node.type === \"parenthesized_expression\") {\r\n const expression = node.namedChildren[0];\r\n return expression ? transparentAliasPath(expression) : null;\r\n }\r\n\r\n if (node.type !== \"identifier\" && node.type !== \"dot_index_expression\") return null;\r\n return normalizeExpressionText(node.text);\r\n}\r\n\r\nfunction immutableTransparentAliases(owner: FunctionInfo, context: RuleContext): Map<string, string> {\r\n const aliases = new Map<string, string>();\r\n if (!owner.body) return aliases;\r\n const mutated = mutatedOwnerLocals(owner, context);\r\n\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type !== \"variable_declaration\") continue;\r\n const names = declarationNames(statement);\r\n const expressions = declarationExpressions(statement);\r\n\r\n for (let index = 0; index < names.length; index += 1) {\r\n const name = names[index];\r\n const expression = expressions[index];\r\n if (!expression || mutated.has(name)) continue;\r\n const source = transparentAliasPath(expression);\r\n if (!source || source === name) continue;\r\n const sourceRoot = rootIdentifier(source);\r\n if (!sourceRoot || mutated.has(sourceRoot)) continue;\r\n aliases.set(name, source);\r\n }\r\n }\r\n\r\n return aliases;\r\n}\r\n\r\nfunction resolveAliasPath(path: string, aliases: Map<string, string>): string {\r\n let current = path;\r\n const visiting = new Set<string>();\r\n\r\n while (true) {\r\n const root = rootIdentifier(current);\r\n if (!root || visiting.has(root)) return current;\r\n const source = aliases.get(root);\r\n if (!source) return current;\r\n visiting.add(root);\r\n current = `${source}${current.slice(root.length)}`;\r\n }\r\n}\r\n\r\nfunction dependencyPathsWithAliases(\r\n node: SyntaxNode,\r\n aliases: Map<string, string>,\r\n): Set<string> {\r\n const dependencies = dependencyPaths(node);\r\n for (const dependency of [...dependencies]) {\r\n const resolved = resolveAliasPath(dependency, aliases);\r\n if (resolved !== dependency) dependencies.add(resolved);\r\n }\r\n return dependencies;\r\n}\r\n\r\nconst PURE_DERIVED_CALL = /^(?:math\\.(?!random(?:seed)?$)[A-Za-z_][A-Za-z0-9_]*|string\\.[A-Za-z_][A-Za-z0-9_]*|table\\.(?:find|concat|clone|create|isfrozen)|(?:Color3|Vector2|Vector3|UDim|UDim2|CFrame|BrickColor|Rect|NumberRange|NumberSequence|ColorSequence|TweenInfo|Font|Ray|Region3|PhysicalProperties)\\.[A-Za-z_][A-Za-z0-9_]*|[^:]+:(?:ToHSV|Lerp|Dot|Cross|FuzzyEq|Inverse|ToObjectSpace|ToWorldSpace))$/;\r\n\r\nfunction isPureDerivedExpression(node: SyntaxNode, context: RuleContext): boolean {\r\n for (const candidate of context.walk(node)) {\r\n if (candidate !== node && (candidate.type === \"function_definition\" || candidate.type === \"function_declaration\")) return false;\r\n if (candidate.type !== \"function_call\") continue;\r\n const rawPath = context.getCallPath(candidate);\r\n if (!rawPath) return false;\r\n const path = normalizeExpressionText(context.resolveCallPath(rawPath));\r\n if (!PURE_DERIVED_CALL.test(path)) return false;\r\n }\r\n return true;\r\n}\r\n\r\nfunction mutatedOwnerLocals(owner: FunctionInfo, context: RuleContext): Set<string> {\r\n const mutated = new Set<string>();\r\n if (!owner.body) return mutated;\r\n\r\n for (const node of context.walk(owner.body)) {\r\n if (node.type !== \"assignment_statement\" && node.type !== \"update_statement\") continue;\r\n if (node.parent?.type === \"variable_declaration\") continue;\r\n const variables = node.namedChildren.find((child) => child.type === \"variable_list\");\r\n if (!variables) continue;\r\n for (const variable of variables.namedChildren) {\r\n const root = rootIdentifier(normalizeExpressionText(variable.text));\r\n if (root) mutated.add(root);\r\n }\r\n }\r\n\r\n return mutated;\r\n}\r\n\r\nfunction derivedLocalDependencies(\r\n owner: FunctionInfo,\r\n available: Set<string>,\r\n stableVariables: Set<string>,\r\n externallyMutableRoots: Set<string>,\r\n context: RuleContext,\r\n): Map<string, Set<string>> {\r\n const derived = new Map<string, Set<string>>();\r\n if (!owner.body) return derived;\r\n const mutated = mutatedOwnerLocals(owner, context);\r\n\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type !== \"variable_declaration\") continue;\r\n const names = declarationNames(statement);\r\n const expressions = declarationExpressions(statement);\r\n if (names.length === 0 || expressions.length === 0) continue;\r\n\r\n for (let index = 0; index < names.length; index += 1) {\r\n const name = names[index];\r\n const expression = expressions[index] ?? expressions[0];\r\n if (!expression || mutated.has(name) || !isPureDerivedExpression(expression, context)) continue;\r\n derived.set(name, capturedDependencyPaths(expression, available, stableVariables, externallyMutableRoots, context));\r\n }\r\n }\r\n\r\n return derived;\r\n}\r\n\r\nfunction expandDerivedLocalCaptures(\r\n captured: Set<string>,\r\n derived: Map<string, Set<string>>,\r\n dependencies: Set<string>,\r\n): Set<string> {\r\n const result = new Set<string>();\r\n const visiting = new Set<string>();\r\n\r\n const addCapture = (capture: string): void => {\r\n if (dependencySatisfies(capture, dependencies)) {\r\n result.add(capture);\r\n return;\r\n }\r\n const root = rootIdentifier(capture);\r\n if (!root || !derived.has(root)) {\r\n result.add(capture);\r\n return;\r\n }\r\n if (visiting.has(root)) return;\r\n\r\n visiting.add(root);\r\n for (const dependency of derived.get(root) ?? []) addCapture(dependency);\r\n visiting.delete(root);\r\n };\r\n\r\n for (const capture of captured) addCapture(capture);\r\n return result;\r\n}\r\n\r\nfunction hasDynamicUnpackDependencies(node: SyntaxNode, context: RuleContext): boolean {\r\n for (const dependency of dependencyExpressions(node)) {\r\n for (const candidate of context.walk(dependency)) {\r\n if (candidate.type !== \"function_call\") continue;\r\n const rawPath = context.getCallPath(candidate);\r\n if (!rawPath) continue;\r\n const path = normalizeExpressionText(context.resolveCallPath(rawPath));\r\n if (path === \"unpack\" || path === \"table.unpack\") return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction memoizedProducerDependencies(owner: FunctionInfo, context: RuleContext): Map<string, Set<string>> {\r\n const producers = new Map<string, Set<string>>();\r\n if (!owner.body) return producers;\r\n\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type !== \"variable_declaration\") continue;\r\n const names = declarationNames(statement);\r\n const expressions = declarationExpressions(statement);\r\n if (names.length === 0 || expressions.length === 0) continue;\r\n\r\n for (let index = 0; index < names.length; index += 1) {\r\n const name = names[index];\r\n const expression = expressions[index] ?? expressions[0];\r\n if (!expression || expression.type !== \"function_call\") continue;\r\n const rawPath = context.getCallPath(expression);\r\n if (!rawPath) continue;\r\n const path = context.resolveCallPath(rawPath);\r\n if (path !== \"React.useMemo\" && path !== \"React.useCallback\") continue;\r\n const args = context.callArguments(expression);\r\n const deps = resolveDependencyTable(context, args[1]);\r\n if (!deps || hasDynamicUnpackDependencies(deps, context)) continue;\r\n producers.set(name, dependencyPaths(deps));\r\n }\r\n }\r\n\r\n return producers;\r\n}\r\n\r\nfunction isTransitivelyCoveredMemoizedValue(\r\n dependency: string,\r\n producers: Map<string, Set<string>>,\r\n dependencies: Set<string>,\r\n): boolean {\r\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(dependency)) return false;\r\n const producerDependencies = producers.get(dependency);\r\n if (!producerDependencies) return false;\r\n return [...producerDependencies].every((producerDependency) => dependencySatisfies(producerDependency, dependencies));\r\n}\r\n\r\nfunction dependencySatisfies(captured: string, dependencies: Set<string>): boolean {\r\n for (const dependency of dependencies) {\r\n if (captured === dependency) return true;\r\n if (captured.startsWith(`${dependency}.`) || captured.startsWith(`${dependency}[`)) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction minimalMissingDependencies(captured: Set<string>, dependencies: Set<string>): string[] {\r\n const missing = [...captured]\r\n .filter((name) => !dependencySatisfies(name, dependencies))\r\n .sort((left, right) => left.length - right.length || left.localeCompare(right));\r\n const result: string[] = [];\r\n for (const candidate of missing) {\r\n if (dependencySatisfies(candidate, new Set(result))) continue;\r\n result.push(candidate);\r\n }\r\n return result.sort();\r\n}\r\n\r\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\r\n if (node.type !== \"variable_declaration\") return [];\r\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\r\n const expressionList = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\r\n return expressionList?.namedChildren ?? [];\r\n}\r\n\r\nfunction directCallsInExpression(node: SyntaxNode): SyntaxNode[] {\r\n const calls: SyntaxNode[] = [];\r\n const pending = [node];\r\n while (pending.length > 0) {\r\n const current = pending.pop()!;\r\n if (current !== node && (current.type === \"function_definition\" || current.type === \"function_declaration\")) continue;\r\n if (current.type === \"function_call\") calls.push(current);\r\n pending.push(...current.namedChildren);\r\n }\r\n return calls;\r\n}\r\n\r\nfunction isCustomHookCall(call: SyntaxNode, context: RuleContext): boolean {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n const final = path.split(/[.:]/).at(-1) ?? \"\";\r\n return !path.startsWith(\"React.\") && /^use[A-Z0-9_]/.test(final);\r\n}\r\n\r\ninterface CustomHookDependencyHints {\r\n memberHandleRoots: Set<string>;\r\n likelyHandleRoots: Set<string>;\r\n compositeHandleRoots: Set<string>;\r\n}\r\n\r\nconst HANDLE_VALUE_NAME = /(?:ref|binding|tween|spring|motion|animation|controller|handle|connection|signal)$/i;\r\nconst HANDLE_HOOK_NAME = /(?:Tween|Spring|Binding|Motion|Animated|Animation|Sound)$/i;\r\n\r\nfunction isCalledAsFunction(owner: FunctionInfo, name: string, context: RuleContext): boolean {\r\n if (!owner.body) return false;\r\n for (const call of context.walk(owner.body)) {\r\n if (call.type !== \"function_call\") continue;\r\n const path = normalizeExpressionText(context.getCallPath(call) ?? \"\");\r\n if (path === name) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction customHookDependencyHints(owner: FunctionInfo, context: RuleContext): CustomHookDependencyHints {\r\n const hints: CustomHookDependencyHints = {\r\n memberHandleRoots: new Set<string>(),\r\n likelyHandleRoots: new Set<string>(),\r\n compositeHandleRoots: new Set<string>(),\r\n };\r\n if (!owner.body) return hints;\r\n\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type !== \"variable_declaration\") continue;\r\n const names = declarationNames(statement);\r\n const expressions = declarationExpressions(statement);\r\n if (names.length === 0 || expressions.length === 0) continue;\r\n\r\n for (let index = 0; index < names.length; index += 1) {\r\n const name = names[index];\r\n const expression = expressions[index] ?? expressions[0];\r\n if (!expression) continue;\r\n const calls = directCallsInExpression(expression);\r\n if (calls.length === 0) continue;\r\n\r\n const directHook = calls.find((call) => isCustomHookCall(call, context));\r\n if (directHook && expression.type === \"function_call\") {\r\n const path = context.resolveCallPath(context.getCallPath(directHook) ?? \"\");\r\n const final = path.split(/[.:]/).at(-1) ?? \"\";\r\n const likelyHandle = HANDLE_VALUE_NAME.test(name) || HANDLE_HOOK_NAME.test(final) || isCalledAsFunction(owner, name, context);\r\n if (likelyHandle) {\r\n hints.memberHandleRoots.add(name);\r\n hints.likelyHandleRoots.add(name);\r\n }\r\n continue;\r\n }\r\n\r\n if (expression.type === \"table_constructor\") {\r\n const meaningfulCalls = calls.filter((call) => {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n return !/^(?:Color3|Vector2|Vector3|UDim|UDim2|CFrame|TweenInfo|NumberSequence|ColorSequence)\\./.test(path);\r\n });\r\n const allHandleHooks = meaningfulCalls.length > 0 && meaningfulCalls.every((call) => {\r\n if (!isCustomHookCall(call, context)) return false;\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n const final = path.split(/[.:]/).at(-1) ?? \"\";\r\n return HANDLE_HOOK_NAME.test(final);\r\n });\r\n if (allHandleHooks) hints.compositeHandleRoots.add(name);\r\n }\r\n }\r\n }\r\n\r\n return hints;\r\n}\r\n\r\nfunction isAmbiguousCustomHookHandle(dependency: string, hints: CustomHookDependencyHints): boolean {\r\n const root = rootIdentifier(dependency);\r\n if (!root) return false;\r\n if (hints.compositeHandleRoots.has(root)) return true;\r\n if (hints.likelyHandleRoots.has(root)) return true;\r\n return hints.memberHandleRoots.has(root) && dependency !== root;\r\n}\r\n\r\n\r\nexport const exhaustiveDeps: RuleDefinition = {\r\n id: \"react-luau/exhaustive-deps\",\r\n category: \"Hooks\",\r\n severity: \"warning\",\r\n description: \"React hook dependency tables should include captured reactive render values.\",\r\n run(context: RuleContext) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n const derivedDependenciesByOwner = new Map<number, Map<string, Set<string>>>();\r\n const dependencyHintsByOwner = new Map<number, CustomHookDependencyHints>();\r\n const memoizedProducersByOwner = new Map<number, Map<string, Set<string>>>();\r\n const transparentAliasesByOwner = new Map<number, Map<string, string>>();\r\n\r\n for (const call of context.findCalls()) {\r\n const rawPath = context.getCallPath(call);\r\n if (!rawPath) continue;\r\n const path = context.resolveCallPath(rawPath);\r\n const shape = HOOK_ARGUMENTS.get(path);\r\n if (!shape) continue;\r\n\r\n const args = context.callArguments(call);\r\n const callback = args[shape.callbackIndex];\r\n const depsArgument = args[shape.depsIndex];\r\n const deps = resolveDependencyTable(context, depsArgument);\r\n if (!callback || callback.type !== \"function_definition\" || !deps || !depsArgument) continue;\r\n const depsNode = tableStartNode(depsArgument);\r\n\r\n const owner = context.nearestFunction(call);\r\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\r\n const ownerKey = nodeKey(owner.node);\r\n const available = context.model.componentLocals.get(ownerKey) ?? new Set<string>();\r\n const stableVariables = context.model.stableVariablesByFunction.get(ownerKey) ?? new Set<string>();\r\n const externallyMutableRoots = context.model.externalMutableVariablesByFunction.get(ownerKey) ?? new Set<string>();\r\n const functionExpandedCaptures = expandLocalFunctionCaptures(\r\n capturedDependencyPaths(callback, available, stableVariables, externallyMutableRoots, context),\r\n owner,\r\n available,\r\n stableVariables,\r\n externallyMutableRoots,\r\n context,\r\n );\r\n let transparentAliases = transparentAliasesByOwner.get(ownerKey);\r\n if (!transparentAliases) {\r\n transparentAliases = immutableTransparentAliases(owner, context);\r\n transparentAliasesByOwner.set(ownerKey, transparentAliases);\r\n }\r\n const dependencies = dependencyPathsWithAliases(deps, transparentAliases);\r\n let derivedDependencies = derivedDependenciesByOwner.get(ownerKey);\r\n if (!derivedDependencies) {\r\n derivedDependencies = derivedLocalDependencies(owner, available, stableVariables, externallyMutableRoots, context);\r\n derivedDependenciesByOwner.set(ownerKey, derivedDependencies);\r\n }\r\n const captured = expandDerivedLocalCaptures(\r\n functionExpandedCaptures,\r\n derivedDependencies,\r\n dependencies,\r\n );\r\n const missing = minimalMissingDependencies(captured, dependencies);\r\n if (missing.length === 0) continue;\r\n\r\n if (hasDynamicUnpackDependencies(deps, context)) {\r\n diagnostics.push({\r\n node: depsNode,\r\n severity: \"suggestion\",\r\n message: `${path} uses dynamic unpack(...) dependencies, so exhaustive dependency analysis is partial.`,\r\n help: \"The analyzer cannot prove which values unpack(...) contributes. Review the explicit dependencies and the custom hook contract.\",\r\n });\r\n continue;\r\n }\r\n\r\n let hints = dependencyHintsByOwner.get(ownerKey);\r\n if (!hints) {\r\n hints = customHookDependencyHints(owner, context);\r\n dependencyHintsByOwner.set(ownerKey, hints);\r\n }\r\n let memoizedProducers = memoizedProducersByOwner.get(ownerKey);\r\n if (!memoizedProducers) {\r\n memoizedProducers = memoizedProducerDependencies(owner, context);\r\n memoizedProducersByOwner.set(ownerKey, memoizedProducers);\r\n }\r\n const uncertainHandles = missing.filter((dependency) => isAmbiguousCustomHookHandle(dependency, hints));\r\n const transitivelyCoveredMemoized = missing.filter((dependency) =>\r\n !isAmbiguousCustomHookHandle(dependency, hints)\r\n && isTransitivelyCoveredMemoizedValue(dependency, memoizedProducers, dependencies)\r\n );\r\n const reactiveMissing = missing.filter((dependency) =>\r\n !isAmbiguousCustomHookHandle(dependency, hints)\r\n && !isTransitivelyCoveredMemoizedValue(dependency, memoizedProducers, dependencies)\r\n );\r\n\r\n if (reactiveMissing.length > 0) {\r\n diagnostics.push({\r\n node: depsNode,\r\n message: `${path} dependency table is missing ${reactiveMissing.join(\", \")}.`,\r\n help: `Add ${reactiveMissing.join(\", \")} to the dependency table, or stop capturing ${reactiveMissing.length === 1 ? \"that value\" : \"those values\"} in the callback.`,\r\n });\r\n }\r\n\r\n if (transitivelyCoveredMemoized.length > 0) {\r\n diagnostics.push({\r\n node: depsNode,\r\n severity: \"suggestion\",\r\n message: `${path} captures memoized value ${transitivelyCoveredMemoized.join(\", \")} without listing ${transitivelyCoveredMemoized.length === 1 ? \"it directly\" : \"them directly\"}, but ${transitivelyCoveredMemoized.length === 1 ? \"its memo dependencies are\" : \"their memo dependencies are\"} already covered.`,\r\n help: \"The producing memo dependencies are already covered. Listing the memoized value directly can make the dependency relationship clearer.\",\r\n });\r\n }\r\n\r\n if (uncertainHandles.length > 0) {\r\n diagnostics.push({\r\n node: depsNode,\r\n severity: \"suggestion\",\r\n message: `${path} captures custom-hook handle ${uncertainHandles.join(\", \")} without listing ${uncertainHandles.length === 1 ? \"it as a dependency\" : \"them as dependencies\"}.`,\r\n help: \"The analyzer cannot prove this custom-hook return is stable. Check the hook contract before changing the dependency table.\",\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
22
24
  "interface BracketDepth {\n parentheses: number;\n brackets: number;\n braces: number;\n}\n\ninterface Range {\n start: number;\n end: number;\n}\n\nfunction scanTypeLine(text: string, depth: BracketDepth): void {\n let quote: string | null = null;\n let escaped = false;\n\n for (let index = 0; index < text.length; index += 1) {\n const char = text[index];\n const next = text[index + 1];\n\n if (quote) {\n if (escaped) escaped = false;\n else if (char === \"\\\\\") escaped = true;\n else if (char === quote) quote = null;\n\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n\n if (char === \"-\" && next === \"-\") break;\n\n if (char === \"(\") depth.parentheses += 1;\n else if (char === \")\")\n depth.parentheses = Math.max(0, depth.parentheses - 1);\n else if (char === \"[\") depth.brackets += 1;\n else if (char === \"]\") depth.brackets = Math.max(0, depth.brackets - 1);\n else if (char === \"{\") depth.braces += 1;\n else if (char === \"}\") depth.braces = Math.max(0, depth.braces - 1);\n }\n}\n\nfunction depthIsZero(depth: BracketDepth): boolean {\n return depth.parentheses === 0 && depth.brackets === 0 && depth.braces === 0;\n}\n\nfunction lineData(source: string): { lines: string[]; offsets: number[] } {\n const lines = source\n .match(/[^\\n]*(?:\\n|$)/g)\n ?.filter(\n (line, index, all) => line.length > 0 || index < all.length - 1,\n ) ?? [source];\n const offsets: number[] = [];\n let offset = 0;\n\n for (const line of lines) {\n offsets.push(offset);\n offset += line.length;\n }\n\n return { lines, offsets };\n}\n\nfunction longBracketEquals(source: string, start: number): number | null {\n if (source[start] !== \"[\") return null;\n\n let index = start + 1;\n\n while (source[index] === \"=\") index += 1;\n\n return source[index] === \"[\" ? index - start - 1 : null;\n}\n\nfunction longBracketEnd(source: string, start: number, equals: number): number {\n const closer = `]${\"=\".repeat(equals)}]`;\n const end = source.indexOf(closer, start + equals + 2);\n\n return end < 0 ? source.length : end + closer.length;\n}\n\n/**\n * Masks comments and optionally strings so syntax compatibility rewrites\n * never alter text that merely contains a keyword\n */\nfunction codeMask(source: string, maskStrings = true): Uint8Array {\n const mask = new Uint8Array(source.length);\n mask.fill(1);\n\n let index = 0;\n\n while (index < source.length) {\n const char = source[index];\n\n if (char === \"'\" || char === '\"') {\n const quote = char;\n let cursor = index;\n let escaped = false;\n\n while (cursor < source.length) {\n if (maskStrings) mask[cursor] = 0;\n\n const current = source[cursor];\n cursor += 1;\n\n if (cursor - 1 === index) continue;\n\n if (escaped) escaped = false;\n else if (current === \"\\\\\") escaped = true;\n else if (current === quote) break;\n }\n\n index = cursor;\n continue;\n }\n\n if (char === \"`\") {\n let cursor = index;\n let escaped = false;\n\n while (cursor < source.length) {\n if (maskStrings) mask[cursor] = 0;\n\n const current = source[cursor];\n cursor += 1;\n\n if (cursor - 1 === index) continue;\n\n if (escaped) escaped = false;\n else if (current === \"\\\\\") escaped = true;\n else if (current === \"`\") break;\n }\n\n index = cursor;\n continue;\n }\n\n if (char === \"-\" && source[index + 1] === \"-\") {\n const longEquals = longBracketEquals(source, index + 2);\n const end =\n longEquals === null\n ? source.indexOf(\"\\n\", index + 2)\n : longBracketEnd(source, index + 2, longEquals);\n const stop = end < 0 ? source.length : end;\n mask.fill(0, index, stop);\n index = stop;\n continue;\n }\n\n if (char === \"[\") {\n const equals = longBracketEquals(source, index);\n\n if (equals !== null) {\n const end = longBracketEnd(source, index, equals);\n\n if (maskStrings) mask.fill(0, index, end);\n\n index = end;\n continue;\n }\n }\n\n index += 1;\n }\n\n return mask;\n}\n\nexport function sourceWithoutComments(source: string): string {\n const mask = codeMask(source, false);\n const parts: string[] = [];\n let start = 0;\n\n for (\n let comment = mask.indexOf(0);\n comment !== -1;\n comment = mask.indexOf(0, start)\n ) {\n parts.push(source.slice(start, comment));\n const nextCode = mask.indexOf(1, comment);\n start = nextCode === -1 ? source.length : nextCode;\n parts.push(source.slice(comment, start).replace(/[^\\r\\n]/g, \" \"));\n }\n\n return parts.length === 0 ? source : parts.join(\"\") + source.slice(start);\n}\n\nfunction isCode(mask: Uint8Array, start: number, end = start + 1): boolean {\n for (let index = start; index < end; index += 1) {\n if (mask[index] !== 1) return false;\n }\n\n return true;\n}\n\nfunction matchingCodeDelimiterEnd(\n source: string,\n mask: Uint8Array,\n start: number,\n opener: string,\n closer: string,\n): number | null {\n if (source[start] !== opener || !isCode(mask, start)) return null;\n\n let depth = 0;\n\n for (let cursor = start; cursor < source.length; cursor += 1) {\n if (!isCode(mask, cursor)) continue;\n\n if (source[cursor] === opener) depth += 1;\n else if (source[cursor] === closer) {\n depth -= 1;\n\n if (depth === 0) return cursor + 1;\n }\n }\n\n return null;\n}\n\nfunction maskTypeAliases(source: string, mask: Uint8Array): Range[] {\n const { lines, offsets } = lineData(source);\n const ranges: Range[] = [];\n const typeStart =\n /^(\\s*)(?:export\\s+)?type\\s+[A-Za-z_][A-Za-z0-9_]*(?:<[^>]*>)?\\s*=/;\n\n for (let lineIndex = 0; lineIndex < lines.length; lineIndex += 1) {\n const line = lines[lineIndex].replace(/\\r?\\n$/, \"\");\n const match = line.match(typeStart);\n\n if (\n !match ||\n !isCode(\n mask,\n offsets[lineIndex] + match.index!,\n offsets[lineIndex] + match.index! + match[0].trimStart().length,\n )\n )\n continue;\n\n const depth: BracketDepth = { parentheses: 0, brackets: 0, braces: 0 };\n let sawExpression = false;\n let endLine = lineIndex;\n\n for (let current = lineIndex; current < lines.length; current += 1) {\n const currentLine = lines[current].replace(/\\r?\\n$/, \"\");\n const segment =\n current === lineIndex\n ? currentLine.slice(match[0].length)\n : currentLine;\n\n if (segment.trim().length > 0) sawExpression = true;\n\n scanTypeLine(segment, depth);\n endLine = current;\n\n if (!sawExpression || !depthIsZero(depth)) continue;\n\n const trimmed = segment.trimEnd();\n\n if (/[|&=,]$/.test(trimmed)) continue;\n\n let nextNonEmpty = \"\";\n\n for (\n let lookahead = current + 1;\n lookahead < lines.length;\n lookahead += 1\n ) {\n nextNonEmpty = lines[lookahead].trim();\n\n if (nextNonEmpty.length > 0) break;\n }\n\n if (/^[|&]/.test(nextNonEmpty)) continue;\n\n break;\n }\n\n ranges.push({\n start: offsets[lineIndex],\n end: offsets[endLine] + lines[endLine].length,\n });\n\n lineIndex = endLine;\n }\n\n return ranges;\n}\n\n/** Simple aliases retained for conservative syntax-based type hints. */\nexport function simpleTypeAliases(\n source: string,\n): Array<{ name: string; type: string; startIndex: number }> {\n const mask = codeMask(source);\n const result = [];\n\n for (const range of maskTypeAliases(source, mask)) {\n // Ignore comments and string contents when interpreting type syntax.\n const text = source\n .slice(range.start, range.end)\n .split(\"\")\n .map((char, index) => (mask[range.start + index] ? char : \" \"))\n .join(\"\");\n\n const match = text.match(\n /^\\s*(?:export\\s+)?type\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*([\\s\\S]*?)\\s*;?\\s*$/,\n );\n\n if (match)\n result.push({\n name: match[1],\n type: match[2],\n startIndex: Buffer.byteLength(source.slice(0, range.start)),\n });\n }\n\n return result;\n}\n\nfunction maskTypeLevelBlocks(source: string, mask: Uint8Array): Range[] {\n const { lines, offsets } = lineData(source);\n const ranges: Range[] = [];\n const declarationStart =\n /^(\\s*)(?:(?:export\\s+)?type\\s+function\\b|declare\\s+(?:extern\\s+type|class|global)\\b)/;\n\n for (let lineIndex = 0; lineIndex < lines.length; lineIndex += 1) {\n const line = lines[lineIndex].replace(/\\r?\\n$/, \"\");\n const match = line.match(declarationStart);\n\n if (!match) continue;\n\n const firstToken = offsets[lineIndex] + match[1].length;\n\n if (!isCode(mask, firstToken)) continue;\n\n const indentation = match[1].replace(/\\t/g, \" \").length;\n let endLine = lineIndex;\n const afterStart = line.slice(match[0].length);\n\n if (!/\\bend\\b/.test(afterStart)) {\n for (let current = lineIndex + 1; current < lines.length; current += 1) {\n const currentLine = lines[current].replace(/\\r?\\n$/, \"\");\n const trimmed = currentLine.trim();\n\n if (!trimmed) continue;\n\n const currentIndent =\n currentLine.match(/^\\s*/)?.[0].replace(/\\t/g, \" \").length ?? 0;\n\n if (\n trimmed === \"end\" &&\n currentIndent <= indentation &&\n isCode(\n mask,\n offsets[current] + currentLine.indexOf(\"end\"),\n offsets[current] + currentLine.indexOf(\"end\") + 3,\n )\n ) {\n endLine = current;\n break;\n }\n }\n }\n\n ranges.push({\n start: offsets[lineIndex],\n end: offsets[endLine] + lines[endLine].length,\n });\n lineIndex = endLine;\n }\n\n return ranges;\n}\n\nfunction attributeRanges(source: string, mask: Uint8Array): Range[] {\n const ranges: Range[] = [];\n\n for (let index = 0; index < source.length; index += 1) {\n if (source[index] !== \"@\" || !isCode(mask, index)) continue;\n\n if (source[index + 1] === \"[\") {\n let depth = 0;\n let cursor = index + 1;\n\n while (cursor < source.length) {\n if (isCode(mask, cursor)) {\n if (source[cursor] === \"[\") depth += 1;\n else if (source[cursor] === \"]\") {\n depth -= 1;\n\n if (depth === 0) {\n cursor += 1;\n break;\n }\n }\n }\n\n cursor += 1;\n }\n\n ranges.push({ start: index, end: cursor });\n index = cursor - 1;\n continue;\n }\n\n const match = source.slice(index + 1).match(/^[A-Za-z_][A-Za-z0-9_]*/);\n\n if (match && isCode(mask, index + 1, index + 1 + match[0].length)) {\n ranges.push({ start: index, end: index + 1 + match[0].length });\n index += match[0].length;\n }\n }\n\n return ranges;\n}\n\nfunction explicitTypeArgumentRanges(source: string, mask: Uint8Array): Range[] {\n const ranges: Range[] = [];\n\n for (let index = 0; index < source.length - 1; index += 1) {\n if (\n source[index] !== \"<\" ||\n source[index + 1] !== \"<\" ||\n !isCode(mask, index, index + 2)\n )\n continue;\n\n let depth = 2;\n let cursor = index + 2;\n\n while (cursor < source.length && depth > 0) {\n if (isCode(mask, cursor)) {\n if (source[cursor] === \"<\") depth += 1;\n else if (source[cursor] === \">\") depth -= 1;\n }\n\n cursor += 1;\n }\n\n if (depth === 0) {\n ranges.push({ start: index, end: cursor });\n index = cursor - 1;\n }\n }\n\n return ranges;\n}\n\nfunction mergeRanges(ranges: Range[]): Range[] {\n const sorted = ranges\n .filter((range) => range.end > range.start)\n .sort((a, b) => a.start - b.start || a.end - b.end);\n const merged: Range[] = [];\n\n for (const range of sorted) {\n const previous = merged.at(-1);\n\n if (previous && range.start <= previous.end)\n previous.end = Math.max(previous.end, range.end);\n else merged.push({ ...range });\n }\n\n return merged;\n}\n\nfunction blankPreservingUtf8Bytes(value: string): string {\n let result = \"\";\n\n for (const char of value) {\n if (char === \"\\n\" || char === \"\\r\") result += char;\n else result += \" \".repeat(new TextEncoder().encode(char).length);\n }\n\n return result;\n}\n\nfunction applyMasks(source: string, ranges: Range[]): string {\n let output = source;\n\n for (const range of mergeRanges(ranges).sort((a, b) => b.start - a.start)) {\n output = `${output.slice(0, range.start)}${blankPreservingUtf8Bytes(output.slice(range.start, range.end))}${output.slice(range.end)}`;\n }\n\n return output;\n}\n\nfunction genericFunctionParameterRanges(\n source: string,\n mask: Uint8Array,\n): Range[] {\n const ranges: Range[] = [];\n const functionPattern = /\\bfunction\\b/g;\n\n for (const match of source.matchAll(functionPattern)) {\n const start = match.index;\n\n if (!isCode(mask, start, start + match[0].length)) continue;\n\n let cursor = start + match[0].length;\n\n while (cursor < source.length) {\n const char = source[cursor];\n\n if (/\\s/.test(char)) {\n cursor += 1;\n continue;\n }\n\n if (char === \"(\") break;\n\n if (char === \"<\") {\n let depth = 0;\n const rangeStart = cursor;\n\n while (cursor < source.length) {\n if (isCode(mask, cursor)) {\n if (source[cursor] === \"<\") depth += 1;\n else if (source[cursor] === \">\") {\n depth -= 1;\n\n if (depth === 0) {\n cursor += 1;\n ranges.push({ start: rangeStart, end: cursor });\n break;\n }\n }\n }\n\n cursor += 1;\n }\n\n break;\n }\n\n if (/[A-Za-z0-9_.:]/.test(char)) {\n cursor += 1;\n continue;\n }\n\n break;\n }\n }\n\n return ranges;\n}\n\nfunction genericFunctionReturnPrefixRanges(\n source: string,\n mask: Uint8Array,\n): Range[] {\n const ranges: Range[] = [];\n const functionPattern = /\\bfunction\\b/g;\n\n for (const match of source.matchAll(functionPattern)) {\n const start = match.index;\n\n if (!isCode(mask, start, start + match[0].length)) continue;\n\n let cursor = start + match[0].length;\n let genericDepth = 0;\n\n while (cursor < source.length) {\n if (!isCode(mask, cursor)) {\n cursor += 1;\n continue;\n }\n\n if (source[cursor] === \"<\") genericDepth += 1;\n else if (source[cursor] === \">\" && genericDepth > 0) genericDepth -= 1;\n else if (source[cursor] === \"(\" && genericDepth === 0) break;\n\n cursor += 1;\n }\n\n if (source[cursor] !== \"(\") continue;\n\n const parameterEnd = matchingCodeDelimiterEnd(\n source,\n mask,\n cursor,\n \"(\",\n \")\",\n );\n\n if (parameterEnd === null) continue;\n\n cursor = parameterEnd;\n\n while (cursor < source.length && /\\s/.test(source[cursor])) cursor += 1;\n\n if (source[cursor] !== \":\" || !isCode(mask, cursor)) continue;\n\n cursor += 1;\n\n while (cursor < source.length && /\\s/.test(source[cursor])) cursor += 1;\n\n if (source[cursor] !== \"<\") continue;\n\n const rangeStart = cursor;\n const genericEnd = matchingCodeDelimiterEnd(source, mask, cursor, \"<\", \">\");\n\n if (genericEnd === null) continue;\n\n cursor = genericEnd;\n\n while (cursor < source.length && /\\s/.test(source[cursor])) cursor += 1;\n\n const typeParametersEnd = matchingCodeDelimiterEnd(\n source,\n mask,\n cursor,\n \"(\",\n \")\",\n );\n\n if (typeParametersEnd === null) continue;\n\n cursor = typeParametersEnd;\n\n while (cursor < source.length && /\\s/.test(source[cursor])) cursor += 1;\n\n if (\n source.slice(cursor, cursor + 2) !== \"->\" ||\n !isCode(mask, cursor, cursor + 2)\n )\n continue;\n\n cursor += 2;\n\n while (cursor < source.length && /[ \\t]/.test(source[cursor])) cursor += 1;\n\n ranges.push({ start: rangeStart, end: cursor });\n }\n\n return ranges;\n}\n\nfunction normalizeLocalTypeofAnnotations(\n source: string,\n mask: Uint8Array,\n): string {\n const replacements: Array<{ start: number; end: number; value: string }> = [];\n const pattern = /\\blocal\\s+[A-Za-z_][A-Za-z0-9_]*\\s*:\\s*typeof\\s*\\(/g;\n\n for (const match of source.matchAll(pattern)) {\n const matchStart = match.index;\n\n if (!isCode(mask, matchStart, matchStart + match[0].length)) continue;\n\n const typeofStart = matchStart + match[0].lastIndexOf(\"typeof\");\n const open = source.indexOf(\"(\", typeofStart + 6);\n\n if (open < 0) continue;\n\n const end = matchingCodeDelimiterEnd(source, mask, open, \"(\", \")\");\n\n if (end === null) continue;\n\n const original = source.slice(typeofStart, end);\n const padding = blankPreservingUtf8Bytes(original).slice(3);\n replacements.push({ start: typeofStart, end, value: `any${padding}` });\n }\n\n let output = source;\n\n for (const replacement of replacements.sort((a, b) => b.start - a.start)) {\n output = `${output.slice(0, replacement.start)}${replacement.value}${output.slice(replacement.end)}`;\n }\n\n return output;\n}\n\n// The bundled grammar understands variadic types (`...T`) but not generic\n// type-pack references (`T...`). Reorder only pack uses outside a function's\n// generic declaration so Tree-sitter sees an equal-width type node.\nfunction normalizeGenericTypePackUses(\n source: string,\n mask: Uint8Array,\n): string {\n const declarationRanges = genericFunctionParameterRanges(source, mask);\n const replacements: Array<{ start: number; end: number; value: string }> = [];\n const packPattern = /\\b[A-Za-z_][A-Za-z0-9_]*\\.\\.\\./g;\n\n for (const match of source.matchAll(packPattern)) {\n const start = match.index;\n const end = start + match[0].length;\n\n if (!isCode(mask, start, end)) continue;\n\n if (\n declarationRanges.some(\n (range) => start >= range.start && end <= range.end,\n )\n )\n continue;\n\n const name = match[0].slice(0, -3);\n replacements.push({ start, end, value: `...${name}` });\n }\n\n let output = source;\n\n for (const replacement of replacements.sort((a, b) => b.start - a.start)) {\n output = `${output.slice(0, replacement.start)}${replacement.value}${output.slice(replacement.end)}`;\n }\n\n return output;\n}\n\nfunction normalizeIntegerLiteralSuffixes(\n source: string,\n mask: Uint8Array,\n): string {\n const suffixes: number[] = [];\n const integerPattern =\n /\\b(?:0[xX][0-9A-Fa-f_]+|0[bB][01_]+|[0-9][0-9_]*)i\\b/g;\n\n for (const match of source.matchAll(integerPattern)) {\n const start = match.index;\n const suffix = start + match[0].length - 1;\n\n if (isCode(mask, start, suffix + 1)) suffixes.push(suffix);\n }\n\n let output = source;\n\n for (const suffix of suffixes.sort((a, b) => b - a)) {\n output = `${output.slice(0, suffix)} ${output.slice(suffix + 1)}`;\n }\n\n return output;\n}\n\nfunction replaceContextualKeywords(source: string, mask: Uint8Array): string {\n const replacements: Array<{ start: number; end: number; value: string }> = [];\n\n const constPattern =\n /\\bconst\\b(?=\\s+(?:function\\b|[A-Za-z_][A-Za-z0-9_]*\\s*(?::|,|=)))/g;\n\n for (const match of source.matchAll(constPattern)) {\n const start = match.index;\n\n if (isCode(mask, start, start + 5))\n replacements.push({ start, end: start + 5, value: \"local\" });\n }\n\n const exportPattern = /\\bexport\\b(?=\\s+(?:local\\b|const\\b|function\\b))/g;\n\n for (const match of source.matchAll(exportPattern)) {\n const start = match.index;\n\n if (isCode(mask, start, start + 6))\n replacements.push({ start, end: start + 6, value: \" \" });\n }\n\n let output = source;\n\n for (const replacement of replacements.sort((a, b) => b.start - a.start)) {\n output = `${output.slice(0, replacement.start)}${replacement.value}${output.slice(replacement.end)}`;\n }\n\n return output;\n}\n\n/**\n * Adapts syntax added after the bundled Tree-sitter grammar without moving any\n * UTF-8 byte offsets. Runtime declarations are normalized to older equivalent\n * syntax; type-only syntax and attributes are blanked because React analysis\n * does not need their AST nodes.\n */\nexport function parserCompatibleSource(source: string): string {\n const mask = codeMask(source);\n const keywordCompatible = replaceContextualKeywords(source, mask);\n const literalCompatible = normalizeIntegerLiteralSuffixes(\n keywordCompatible,\n mask,\n );\n const packCompatible = normalizeGenericTypePackUses(literalCompatible, mask);\n const typeofCompatible = normalizeLocalTypeofAnnotations(\n packCompatible,\n mask,\n );\n\n const ranges = [\n ...maskTypeAliases(source, mask),\n ...maskTypeLevelBlocks(source, mask),\n ...attributeRanges(source, mask),\n ...explicitTypeArgumentRanges(source, mask),\n ...genericFunctionReturnPrefixRanges(source, mask),\n ];\n\n const masked = applyMasks(typeofCompatible, ranges);\n\n // tree-sitter-luau 1.2.0 treats a statement-level assignment to the valid\n // Luau identifier `type` as a malformed type alias. Replace only that token\n // with an equal-width identifier so syntax locations remain aligned.\n return masked.replace(\n /^(\\s*)type(?=\\s*(?:\\+=|-=|\\*=|\\/=|%=|\\^=|\\.\\.=|=(?!=)))/gm,\n \"$1_typ\",\n );\n}\n",
@@ -29,23 +31,25 @@
29
31
  "import type { SyntaxNode } from \"../syntax\";\r\nimport type { RuleContext, RuleDefinition } from \"../types\";\r\nimport { fieldName, fieldValue } from \"./helpers\";\r\n\r\nconst FRESH_CALLS = [\r\n /^math\\.random$/,\r\n /^Random\\.new$/,\r\n /:GenerateGUID$/,\r\n /^DateTime\\.now$/,\r\n /^os\\.clock$/,\r\n /^tick$/,\r\n /^time$/,\r\n /:GetServerTimeNow$/,\r\n /:NextInteger$/,\r\n /:NextNumber$/,\r\n];\r\n\r\nfunction freshDescription(node: SyntaxNode, context: RuleContext): string | null {\r\n for (const child of context.walk(node)) {\r\n if (child.type !== \"function_call\") continue;\r\n const path = context.getCallPath(child) ?? \"\";\r\n if (FRESH_CALLS.some((pattern) => pattern.test(path)) || /Random\\.new\\s*\\([^)]*\\)\\s*:\\s*Next(?:Integer|Number)/s.test(child.text)) {\r\n return `${path || \"fresh-value call\"}()`;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction isCreateElementCall(node: SyntaxNode | undefined, context: RuleContext): boolean {\r\n if (!node || node.type !== \"function_call\") return false;\r\n return context.resolveCallPath(context.getCallPath(node) ?? \"\") === \"React.createElement\";\r\n}\r\n\r\nexport const noRandomKey: RuleDefinition = {\r\n id: \"react-luau/no-random-key\",\r\n category: \"Correctness\",\r\n severity: \"error\",\r\n description: \"React child keys must not be regenerated on each render.\",\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const field of context.walk()) {\r\n if (field.type !== \"field\") continue;\r\n const name = field.childForFieldName(\"name\");\r\n let keyExpression: SyntaxNode | null = null;\r\n\r\n if (fieldName(field) === \"key\") {\r\n keyExpression = fieldValue(field);\r\n } else if (field.text.trim().startsWith(\"[\") && name) {\r\n const value = field.namedChildren.find((child) => child.startIndex > name.endIndex);\r\n if (isCreateElementCall(value, context)) keyExpression = name;\r\n }\r\n\r\n if (!keyExpression) continue;\r\n const description = freshDescription(keyExpression, context);\r\n if (!description) continue;\r\n\r\n diagnostics.push({\r\n node: keyExpression,\r\n message: `React key is created from ${description}, so its identity can change every render.`,\r\n help: \"Use stable identity from the item itself, such as UserId, an immutable record ID, or another persistent key. Changing keys remounts children and breaks preserved state or exit-animation identity.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
30
32
  "import type { RuleDefinition } from \"../types\";\r\nimport { reactApiPath, resolveLocalValue } from \"../ast/local-values\";\r\n\r\nimport { callNameNode, isUnconditionallyExecutedInFunction } from \"./helpers\";\r\n\r\nexport const noSetStateInRender: RuleDefinition = {\r\n id: \"react-luau/no-set-state-in-render\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Do not call a component's state setter unconditionally during render\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const component = context.nearestFunction(call);\r\n\r\n if (!component?.isComponent) continue;\r\n\r\n const name = call.childForFieldName(\"name\");\r\n const setter = name && resolveLocalValue(context, name);\r\n\r\n if (\r\n !setter ||\r\n setter.returnIndex !== 1 ||\r\n reactApiPath(context, setter.value) !== \"React.useState\" ||\r\n context.nearestFunction(setter.value) !== component ||\r\n !isUnconditionallyExecutedInFunction(context, call, component)\r\n )\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n message: `${name!.text}() is called unconditionally during component render`,\r\n summary: `${name!.text} runs during render and can loop`,\r\n help: \"Move the update to the event or effect that owns it, or derive the value during render — an unconditional render-phase state update can continuously trigger new renders\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
31
33
  "import type { SyntaxNode } from \"../syntax\";\r\nimport type { RuleDefinition } from \"../types\";\r\n\r\nconst REQUIRED_CLOSERS = new Map<string, string>([\r\n [\"parameters\", \")\"],\r\n [\"arguments\", \")\"],\r\n [\"table_constructor\", \"}\"],\r\n]);\r\n\r\nconst TYPE_SYNTAX_ANCESTORS = new Set([\r\n \"type_definition\",\r\n \"type_annotation\",\r\n \"type_parameters\",\r\n \"generic_type\",\r\n \"function_type\",\r\n \"optional_type\",\r\n \"object_type\",\r\n \"union_type\",\r\n \"intersection_type\",\r\n \"tuple_type\",\r\n \"singleton_type\",\r\n \"variadic_type\",\r\n \"variadic_type_pack\",\r\n]);\r\n\r\nfunction incompleteDelimitedNode(node: SyntaxNode): string | null {\r\n const closer = REQUIRED_CLOSERS.get(node.type);\r\n if (!closer) return null;\r\n return node.text.trimEnd().endsWith(closer) ? null : closer;\r\n}\r\n\r\nfunction isBundledGrammarTypeGap(node: SyntaxNode): boolean {\r\n let current: SyntaxNode | null = node;\r\n while (current) {\r\n if (TYPE_SYNTAX_ANCESTORS.has(current.type)) {\r\n if (current.type !== \"type_definition\") return true;\r\n if (/^\\s*(?:export\\s+)?type\\s+[A-Za-z_][A-Za-z0-9_]*/s.test(current.text)) return true;\r\n }\r\n current = current.parent;\r\n }\r\n return false;\r\n}\r\n\r\nexport const parseErrors: RuleDefinition = {\r\n id: \"react-luau/parse-error\",\r\n category: \"Correctness\",\r\n severity: \"error\",\r\n lspEnabled: false,\r\n description: \"Report executable Luau syntax that the bundled parser cannot form into a complete syntax tree.\",\r\n run(context) {\r\n const diagnostics = [];\r\n const covered: Array<{ start: number; end: number }> = [];\r\n\r\n for (const node of context.walk()) {\r\n const missingCloser = incompleteDelimitedNode(node);\r\n if (!node.isError && !node.isMissing && !missingCloser) continue;\r\n if (isBundledGrammarTypeGap(node)) continue;\r\n if (covered.some((range) => node.startIndex >= range.start && node.endIndex <= range.end)) continue;\r\n covered.push({ start: node.startIndex, end: node.endIndex });\r\n\r\n let message = \"Luau syntax could not be parsed cleanly at this location.\";\r\n if (node.isMissing) message = `Luau syntax is missing ${node.type}.`;\r\n else if (missingCloser) message = `Luau syntax is missing closing ${missingCloser}.`;\r\n\r\n diagnostics.push({\r\n node,\r\n message,\r\n help: \"Fix the syntax error before relying on downstream React-Luau diagnostics in this file.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
32
- "import {\r\n normalizeRequireTarget,\r\n resolveModuleReference,\r\n} from \"../module-resolution\";\r\n\r\nimport type { SyntaxNode } from \"../syntax\";\r\n\r\nimport type {\r\n DiagnosticInput,\r\n FunctionInfo,\r\n RuleContext,\r\n RuleDefinition,\r\n StateBinding,\r\n} from \"../types\";\r\n\r\nimport { normalizeExpressionText, sameNode } from \"../ast/walk\";\r\nimport { isHighFrequencyRunServiceCall } from \"../roblox-semantics\";\r\n\r\nimport {\r\n callNameNode,\r\n declarationNames,\r\n identifierNode,\r\n fieldName,\r\n fieldNameNode,\r\n fieldValue,\r\n isBindingShadowedBetween,\r\n stateBindingsFor,\r\n} from \"./helpers\";\r\n\r\nconst STATIC_DISCOVERY = /(?::|\\.)(GetChildren|GetDescendants)$/;\r\n\r\nconst PURE_TRIVIAL_CALLS =\r\n /^(?:tostring|tonumber|type|typeof|math\\.[A-Za-z_][A-Za-z0-9_]*|string\\.(?:lower|upper|format|len)|Color3\\.(?:new|fromRGB|fromHSV)|Vector[23]\\.new|UDim2?\\.(?:new|fromOffset|fromScale)|CFrame\\.new)$/;\r\n\r\nfunction declarationForCall(call: SyntaxNode): SyntaxNode | null {\r\n let current: SyntaxNode | null = call.parent;\r\n\r\n while (current) {\r\n if (current.type === \"variable_declaration\") return current;\r\n\r\n if (\r\n current.type === \"function_definition\" ||\r\n current.type === \"function_declaration\"\r\n )\r\n return null;\r\n\r\n current = current.parent;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction declaredNameForCall(call: SyntaxNode): string | null {\r\n const declaration = declarationForCall(call);\r\n\r\n return declaration ? (declarationNames(declaration)[0] ?? null) : null;\r\n}\r\n\r\nfunction isIdentifierPropertyName(node: SyntaxNode): boolean {\r\n const parent = node.parent;\r\n\r\n if (parent?.type === \"dot_index_expression\")\r\n return sameNode(parent.childForFieldName(\"field\"), node);\r\n\r\n if (parent?.type === \"method_index_expression\") {\r\n return (\r\n sameNode(parent.childForFieldName(\"method\"), node) ||\r\n sameNode(parent.namedChildren.at(-1), node)\r\n );\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction identifierReferences(\r\n context: RuleContext,\r\n owner: FunctionInfo,\r\n name: string,\r\n declaration: SyntaxNode | null,\r\n): SyntaxNode[] {\r\n if (!owner.body) return [];\r\n\r\n const result: SyntaxNode[] = [];\r\n\r\n for (const node of context.walk(owner.body)) {\r\n if (node.type !== \"identifier\" || node.text !== name) continue;\r\n\r\n if (\r\n declaration &&\r\n node.startIndex >= declaration.startIndex &&\r\n node.endIndex <= declaration.endIndex\r\n )\r\n continue;\r\n\r\n if (isIdentifierPropertyName(node)) continue;\r\n\r\n if (isBindingShadowedBetween(node, owner, name, declaration)) continue;\r\n\r\n result.push(node);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction nearestAncestor(\r\n node: SyntaxNode,\r\n stop: SyntaxNode,\r\n type: string,\r\n): SyntaxNode | null {\r\n let current = node.parent;\r\n\r\n while (current && !sameNode(current, stop)) {\r\n if (current.type === type) return current;\r\n\r\n current = current.parent;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction highFrequencyCallback(\r\n node: SyntaxNode,\r\n context: RuleContext,\r\n): SyntaxNode | null {\r\n let current = node.parent;\r\n\r\n while (current) {\r\n if (current.type === \"function_definition\") {\r\n const argumentsNode = current.parent;\r\n\r\n const call =\r\n argumentsNode?.type === \"arguments\" ? argumentsNode.parent : null;\r\n\r\n if (\r\n call?.type === \"function_call\" &&\r\n isHighFrequencyRunServiceCall(call, context)\r\n )\r\n return current;\r\n }\r\n\r\n current = current.parent;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction setterIsNoChangeGuarded(\r\n call: SyntaxNode,\r\n callback: SyntaxNode,\r\n binding: StateBinding,\r\n): boolean {\r\n let current = call.parent;\r\n\r\n while (current && !sameNode(current, callback)) {\r\n if (current.type === \"if_statement\" || current.type === \"if_expression\") {\r\n const header = current.text.split(/\\bthen\\b/s, 1)[0] ?? \"\";\r\n const escaped = binding.valueName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\n if (\r\n new RegExp(\r\n `\\\\b${escaped}\\\\b[^\\\\n]*(?:~=|==)|(?:~=|==)[^\\\\n]*\\\\b${escaped}\\\\b`,\r\n ).test(header)\r\n )\r\n return true;\r\n }\r\n\r\n current = current.parent;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction setterIsOneShotGuarded(\r\n call: SyntaxNode,\r\n callback: SyntaxNode,\r\n): boolean {\r\n let current = call.parent;\r\n\r\n while (current && !sameNode(current, callback)) {\r\n if (current.type === \"if_statement\") {\r\n const header = current.text.split(/\\bthen\\b/s, 1)[0] ?? \"\";\r\n\r\n const candidates = [\r\n ...header.matchAll(/\\bnot\\s+([A-Za-z_][A-Za-z0-9_]*)\\b/g),\r\n ...header.matchAll(/\\b([A-Za-z_][A-Za-z0-9_]*)\\s*==\\s*false\\b/g),\r\n ].map((match) => match[1]);\r\n\r\n for (const guard of candidates) {\r\n const escaped = guard.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\n if (!new RegExp(`\\\\b${escaped}\\\\s*=\\\\s*true\\\\b`).test(current.text))\r\n continue;\r\n\r\n if (new RegExp(`\\\\b${escaped}\\\\s*=\\\\s*false\\\\b`).test(callback.text))\r\n continue;\r\n\r\n return true;\r\n }\r\n }\r\n\r\n current = current.parent;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction componentRenderCost(\r\n context: RuleContext,\r\n owner: FunctionInfo,\r\n): string[] {\r\n if (!owner.body) return [];\r\n\r\n let clones = 0;\r\n let loops = 0;\r\n let discovery = 0;\r\n\r\n for (const node of context.walk(owner.body)) {\r\n if (context.nearestFunction(node) !== owner) continue;\r\n\r\n if (\r\n node.type === \"for_statement\" ||\r\n node.type === \"while_statement\" ||\r\n node.type === \"repeat_statement\"\r\n )\r\n loops += 1;\r\n\r\n if (node.type !== \"function_call\") continue;\r\n\r\n const path = context.resolveCallPath(context.getCallPath(node) ?? \"\");\r\n\r\n if (path === \"table.clone\") clones += 1;\r\n\r\n if (STATIC_DISCOVERY.test(path) || /:GetTagged$/.test(path)) discovery += 1;\r\n }\r\n\r\n const parts: string[] = [];\r\n\r\n if (clones > 0) parts.push(`${clones} table clone${clones === 1 ? \"\" : \"s\"}`);\r\n\r\n if (loops > 1) parts.push(`${loops} collection/loop passes`);\r\n\r\n if (discovery > 0)\r\n parts.push(\r\n `${discovery} Instance discovery call${discovery === 1 ? \"\" : \"s\"}`,\r\n );\r\n\r\n return parts;\r\n}\r\n\r\nfunction memoizedImports(\r\n context: RuleContext,\r\n): Map<string, \"shallow\" | \"custom\"> {\r\n const result = new Map<string, \"shallow\" | \"custom\">();\r\n\r\n for (const node of context.walk(context.root)) {\r\n if (node.type !== \"variable_declaration\") continue;\r\n\r\n const match = node.text.match(\r\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\r\n );\r\n\r\n if (!match) continue;\r\n\r\n const localName = match[1];\r\n\r\n const memoKind = resolveModuleReference(\r\n normalizeRequireTarget(match[2]),\r\n context.project.memoizedModules,\r\n );\r\n\r\n if (memoKind) result.set(localName, memoKind);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction fieldLabel(field: SyntaxNode): string {\r\n return fieldName(field) ?? field.childForFieldName(\"name\")?.text ?? \"prop\";\r\n}\r\n\r\nfunction isInlineFreshValue(node: SyntaxNode | null): boolean {\r\n return (\r\n node?.type === \"table_constructor\" || node?.type === \"function_definition\"\r\n );\r\n}\r\n\r\nexport const rerenderUnstableMemoProps: RuleDefinition = {\r\n id: \"react-luau/rerender-unstable-memo-props\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Warn when fresh table or function props defeat shallow React.memo comparisons.\",\r\n\r\n guidance: {\r\n explanation:\r\n \"A new function or table has a new identity, so a shallow memo comparison cannot skip this child.\",\r\n\r\n help: \"Stabilize props that change each render if this child is expensive, move construction into the child, or remove ineffective memoization.\",\r\n },\r\n\r\n run(context) {\r\n const imports = memoizedImports(context);\r\n\r\n if (imports.size === 0) return [];\r\n\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const call of context.findCalls()) {\r\n if (\r\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\r\n \"React.createElement\"\r\n )\r\n continue;\r\n\r\n const component = context.containingComponent(call);\r\n\r\n if (!component || context.nearestFunction(call) !== component) continue;\r\n\r\n const args = context.callArguments(call);\r\n const childName = args[0]?.text.trim() ?? \"\";\r\n\r\n if (imports.get(childName) !== \"shallow\") continue;\r\n\r\n const props = args[1];\r\n\r\n if (!props || props.type !== \"table_constructor\") continue;\r\n\r\n const unstableFields = props.namedChildren\r\n .filter((node) => node.type === \"field\")\r\n .filter((field) => isInlineFreshValue(fieldValue(field)));\r\n\r\n if (unstableFields.length === 0) continue;\r\n\r\n const unstable = unstableFields.map(fieldLabel);\r\n const highlights = unstableFields.map(fieldNameNode);\r\n\r\n diagnostics.push({\r\n node: highlights[0],\r\n highlights,\r\n severity: \"warning\",\r\n message: `Memoized ${childName} receives fresh ${unstable.join(\", \")} prop${unstable.length === 1 ? \"\" : \"s\"} on every parent render.`,\r\n summary: `${childName} gets ${unstable.length} fresh ${unstable.length === 1 ? \"prop\" : \"props\"} each render. Memoization cannot skip it.`,\r\n\r\n editorRanges: highlights.map((node, index) => ({\r\n node,\r\n summary: `${childName} gets a fresh ${unstable[index]} prop each render. Memoization cannot skip it.`,\r\n })),\r\n\r\n help: \"Fresh table or function identity prevents the shallow memo comparison from skipping this child. Stabilize the prop only when the parent rerenders frequently, move construction into the child, or remove ineffective memoization.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const rerenderHighFrequencyState: RuleDefinition = {\r\n id: \"react-luau/rerender-high-frequency-state\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Find state updates from frame callbacks that can rerender expensive component trees continuously.\",\r\n\r\n guidance: {\r\n explanation:\r\n \"Doctor found a state setter on a high-frequency callback path. Calling a setter every frame still has overhead, and any changed value can schedule React reconciliation. This rule now suppresses simple one-shot guards it can prove.\",\r\n\r\n caveat:\r\n \"A same-value state update can be bailed out by React, so this finding does not prove that the component actually rerenders every frame. It flags the per-frame setter path and is suppressed when Doctor can prove a simple one-shot or direct no-change guard.\",\r\n },\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n const seen = new Set<string>();\r\n\r\n for (const call of context.findCalls()) {\r\n const callback = highFrequencyCallback(call, context);\r\n\r\n if (!callback) continue;\r\n\r\n const component = context.containingComponent(call);\r\n\r\n if (!component) continue;\r\n\r\n const setter = context.getCallPath(call) ?? \"\";\r\n\r\n const binding = context.model.stateBindings.find(\r\n (candidate) =>\r\n candidate.owner === component && candidate.setterName === setter,\r\n );\r\n\r\n if (\r\n !binding ||\r\n setterIsNoChangeGuarded(call, callback, binding) ||\r\n setterIsOneShotGuarded(call, callback)\r\n )\r\n continue;\r\n\r\n const key = `${callback.startIndex}:${setter}`;\r\n\r\n if (seen.has(key)) continue;\r\n\r\n seen.add(key);\r\n\r\n const renderCost = componentRenderCost(context, component);\r\n\r\n diagnostics.push({\r\n node: callNameNode(binding.call),\r\n severity: \"warning\",\r\n message: `${binding.valueName} has a state setter called from a per-frame callback and may cause frequent rerenders when its value changes.`,\r\n\r\n help:\r\n renderCost.length > 0\r\n ? `This render also performs ${renderCost.join(\" and \")}. Isolate or throttle the high-frequency state, or use Bindings for host-property-only updates.`\r\n : \"Isolate or throttle the high-frequency state. Use React.useBinding when the value only drives host Instance properties.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nfunction singleReturnExpression(\r\n callback: SyntaxNode | undefined,\r\n): SyntaxNode | null {\r\n if (!callback || callback.type !== \"function_definition\") return null;\r\n\r\n const body = callback.childForFieldName(\"body\");\r\n\r\n if (!body || body.namedChildren.length !== 1) return null;\r\n\r\n const statement = body.namedChildren[0];\r\n\r\n if (statement.type !== \"return_statement\") return null;\r\n\r\n const expressionList = statement.namedChildren.find(\r\n (child) => child.type === \"expression_list\",\r\n );\r\n\r\n if (!expressionList || expressionList.namedChildren.length !== 1) return null;\r\n\r\n return expressionList.namedChildren[0] ?? null;\r\n}\r\n\r\nfunction isTrivialMemoExpression(\r\n expression: SyntaxNode,\r\n context: RuleContext,\r\n): boolean {\r\n if (\r\n expression.type === \"table_constructor\" ||\r\n expression.type === \"function_definition\"\r\n )\r\n return false;\r\n\r\n let calls = 0;\r\n\r\n for (const node of context.walk(expression)) {\r\n if (\r\n node.type === \"for_statement\" ||\r\n node.type === \"while_statement\" ||\r\n node.type === \"repeat_statement\"\r\n )\r\n return false;\r\n\r\n if (node.type !== \"function_call\") continue;\r\n\r\n calls += 1;\r\n const path = context.resolveCallPath(context.getCallPath(node) ?? \"\");\r\n\r\n if (/random|GenerateGUID|GetServerTimeNow|tick|time|clock/i.test(path))\r\n return false;\r\n\r\n if (!PURE_TRIVIAL_CALLS.test(path)) return false;\r\n }\r\n\r\n return calls <= 2 && expression.text.length <= 180;\r\n}\r\n\r\nfunction valueIdentityIsObservedByHook(\r\n context: RuleContext,\r\n owner: FunctionInfo,\r\n name: string,\r\n declaration: SyntaxNode,\r\n): boolean {\r\n if (!owner.body) return false;\r\n\r\n for (const call of context.walk(owner.body)) {\r\n if (call.type !== \"function_call\") continue;\r\n\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (!/^React\\.use(?:Effect|LayoutEffect|Memo|Callback)$/.test(path))\r\n continue;\r\n\r\n const dependencies = context.callArguments(call)[1];\r\n\r\n if (!dependencies) continue;\r\n\r\n for (const reference of identifierReferences(\r\n context,\r\n owner,\r\n name,\r\n declaration,\r\n )) {\r\n if (\r\n reference.startIndex >= dependencies.startIndex &&\r\n reference.endIndex <= dependencies.endIndex\r\n )\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isEmptyDependencyTable(node: SyntaxNode | undefined): boolean {\r\n return Boolean(\r\n node &&\r\n node.type === \"table_constructor\" &&\r\n node.namedChildren.length === 0,\r\n );\r\n}\r\n\r\nexport const rerenderUnnecessaryUseMemo: RuleDefinition = {\r\n id: \"react-luau/rerender-unnecessary-usememo\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Find trivial derived values that cost more to memoize than to compute directly.\",\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const call of context.findCalls()) {\r\n if (\r\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\r\n \"React.useMemo\"\r\n )\r\n continue;\r\n\r\n const owner =\r\n context.containingComponent(call) ?? context.nearestFunction(call);\r\n\r\n const declaration = declarationForCall(call);\r\n const name = declaredNameForCall(call);\r\n const argumentsList = context.callArguments(call);\r\n const expression = singleReturnExpression(argumentsList[0]);\r\n\r\n if (isEmptyDependencyTable(argumentsList[1])) continue;\r\n\r\n if (\r\n !owner ||\r\n !declaration ||\r\n !name ||\r\n !expression ||\r\n !isTrivialMemoExpression(expression, context)\r\n )\r\n continue;\r\n\r\n if (valueIdentityIsObservedByHook(context, owner, name, declaration))\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n message: \"useMemo caches a trivial derived value.\",\r\n help: \"Compute the value directly unless stable identity or a genuinely expensive calculation is required.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nfunction isOnlyDirectFunctionCallReference(\r\n node: SyntaxNode,\r\n name: string,\r\n): boolean {\r\n const parent = node.parent;\r\n\r\n return (\r\n parent?.type === \"function_call\" &&\r\n sameNode(parent.childForFieldName(\"name\"), node) &&\r\n (parent.childForFieldName(\"name\")?.text.trim() ?? \"\") === name\r\n );\r\n}\r\n\r\nexport const rerenderUnnecessaryUseCallback: RuleDefinition = {\r\n id: \"react-luau/rerender-unnecessary-usecallback\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Find useCallback values whose stable function identity is never observed.\",\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const call of context.findCalls()) {\r\n if (\r\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\r\n \"React.useCallback\"\r\n )\r\n continue;\r\n\r\n const owner =\r\n context.containingComponent(call) ?? context.nearestFunction(call);\r\n\r\n const declaration = declarationForCall(call);\r\n const name = declaredNameForCall(call);\r\n\r\n if (!owner || !declaration || !name) continue;\r\n\r\n const references = identifierReferences(\r\n context,\r\n owner,\r\n name,\r\n declaration,\r\n );\r\n\r\n if (\r\n references.length === 0 ||\r\n references.some(\r\n (node) => !isOnlyDirectFunctionCallReference(node, name),\r\n )\r\n )\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n message: `${name} is wrapped in useCallback, but its identity is never observed.`,\r\n help: \"Use a normal local function. Keep useCallback when the function is passed to a memoized child, retained by another hook, or otherwise compared by identity.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nfunction staticDiscoveryPath(path: string): boolean {\r\n if (/:GetTagged$/.test(path)) return true;\r\n\r\n if (!STATIC_DISCOVERY.test(path)) return false;\r\n\r\n const receiver = path.replace(/(?::|\\.)(?:GetChildren|GetDescendants)$/, \"\");\r\n\r\n return /^(?:ReplicatedStorage|ServerStorage|ServerScriptService|StarterGui|StarterPlayer|script)(?:\\.|:|$)/.test(\r\n receiver,\r\n );\r\n}\r\n\r\nexport const rerenderStaticDiscoveryInRender: RuleDefinition = {\r\n id: \"react-luau/rerender-static-discovery-in-render\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Find static Instance/module discovery repeated during component render.\",\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const component = context.containingComponent(call);\r\n\r\n if (!component || context.nearestFunction(call) !== component) continue;\r\n\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (!staticDiscoveryPath(path)) continue;\r\n\r\n const loop = nearestAncestor(call, component.node, \"for_statement\");\r\n const body = loop?.childForFieldName(\"body\");\r\n\r\n const requiresModules = Boolean(\r\n body &&\r\n [...context.walk(body)].some(\r\n (node) =>\r\n node.type === \"function_call\" &&\r\n context.getCallPath(node) === \"require\",\r\n ),\r\n );\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n severity: \"warning\",\r\n message: `${path} runs during component render${requiresModules ? \" and feeds module requires\" : \"\"}.`,\r\n\r\n help: requiresModules\r\n ? \"Discover and require static modules once outside the component, or cache the derived catalog by the inputs that can actually change.\"\r\n : \"Move static discovery outside the component or memoize the derived result when the source can change.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nfunction genericLoopCollection(loop: SyntaxNode): string | null {\r\n const clause = loop.namedChildren.find(\r\n (child) => child.type === \"for_generic_clause\",\r\n );\r\n\r\n if (!clause) return null;\r\n\r\n const match = clause.text.match(/\\bin\\s+(.+)$/s);\r\n\r\n if (!match) return null;\r\n\r\n const expression = normalizeExpressionText(match[1]);\r\n\r\n if (!expression || expression.length > 160) return null;\r\n\r\n return expression;\r\n}\r\n\r\nexport const rerenderRepeatedCollectionScan: RuleDefinition = {\r\n id: \"react-luau/rerender-repeated-collection-scan\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Find repeated direct render passes over the same collection expression.\",\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const component of context.model.functions) {\r\n if (!component.isComponent || !component.body) continue;\r\n\r\n const groups = new Map<\r\n string,\r\n { display: string; loops: SyntaxNode[] }\r\n >();\r\n\r\n for (const node of context.walk(component.body)) {\r\n if (\r\n node.type !== \"for_statement\" ||\r\n context.nearestFunction(node) !== component\r\n )\r\n continue;\r\n\r\n const collection = genericLoopCollection(node);\r\n\r\n if (!collection || collection === \"{}\") continue;\r\n\r\n const clause = node.namedChildren.find(\r\n (child) => child.type === \"for_generic_clause\",\r\n );\r\n\r\n const display =\r\n clause?.text\r\n .match(/\\bin\\s+(.+)$/s)?.[1]\r\n ?.trim()\r\n .replace(/\\s+/g, \" \") ?? collection;\r\n\r\n const group = groups.get(collection) ?? { display, loops: [] };\r\n group.loops.push(node);\r\n groups.set(collection, group);\r\n }\r\n\r\n for (const { display, loops } of groups.values()) {\r\n if (loops.length < 2) continue;\r\n\r\n const repeatedCollections = loops.map((loop) => {\r\n const clause = loop.namedChildren.find(\r\n (child) => child.type === \"for_generic_clause\",\r\n );\r\n\r\n return clause?.namedChildren.at(-1) ?? clause ?? loop;\r\n });\r\n\r\n diagnostics.push({\r\n node: repeatedCollections[1],\r\n highlights: repeatedCollections,\r\n message: `${display} is scanned ${loops.length} times during this render.`,\r\n help: \"Consider combining the passes or deriving a lookup when the collection is large or the component rerenders frequently.\",\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const rerenderStaticState: RuleDefinition = {\r\n id: \"react-luau/rerender-static-state\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Find React state whose setter is never used and therefore cannot change.\",\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const component of context.model.functions) {\r\n if (!component.isComponent || !component.body) continue;\r\n\r\n for (const binding of stateBindingsFor(context, component)) {\r\n if (binding.setterName === \"_\" || binding.setterName.startsWith(\"_\"))\r\n continue;\r\n\r\n const setterRefs = identifierReferences(\r\n context,\r\n component,\r\n binding.setterName,\r\n binding.declaration,\r\n );\r\n\r\n if (setterRefs.length > 0) continue;\r\n\r\n const valueRefs = identifierReferences(\r\n context,\r\n component,\r\n binding.valueName,\r\n binding.declaration,\r\n );\r\n\r\n if (valueRefs.length === 0) continue;\r\n\r\n diagnostics.push({\r\n node:\r\n identifierNode(binding.declaration, binding.setterName) ??\r\n binding.declaration,\r\n\r\n message: `${binding.valueName} cannot change because ${binding.setterName} is never used.`,\r\n help: \"Use a normal derived value. If the initial value must be captured once for the component lifetime, use a ref.\",\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nfunction memoReturnsCurrentCell(\r\n call: SyntaxNode,\r\n context: RuleContext,\r\n): boolean {\r\n const args = context.callArguments(call);\r\n const callback = args[0];\r\n const deps = args[1];\r\n\r\n if (\r\n !callback ||\r\n callback.type !== \"function_definition\" ||\r\n deps?.type !== \"table_constructor\" ||\r\n deps.namedChildren.length > 0\r\n )\r\n return false;\r\n\r\n const expression = singleReturnExpression(callback);\r\n\r\n if (!expression || expression.type !== \"table_constructor\") return false;\r\n\r\n const fields = expression.namedChildren.filter(\r\n (node) => node.type === \"field\",\r\n );\r\n\r\n return fields.length === 1 && fieldName(fields[0]) === \"current\";\r\n}\r\n\r\nexport const preferUseRefForMutableCell: RuleDefinition = {\r\n id: \"react-luau/prefer-use-ref-for-mutable-cell\",\r\n category: \"Hooks\",\r\n severity: \"suggestion\",\r\n\r\n description:\r\n \"Prefer useRef over useMemo-created tables that only emulate a mutable current cell.\",\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const call of context.findCalls()) {\r\n if (\r\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\r\n \"React.useMemo\"\r\n )\r\n continue;\r\n\r\n if (!memoReturnsCurrentCell(call, context)) continue;\r\n\r\n const name = declaredNameForCall(call) ?? \"This value\";\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n message: `${name} uses useMemo to create a { current = ... } mutable cell.`,\r\n help: \"Use React.useRef(initialValue) to express the same lifetime and mutable-cell intent directly.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
34
+ "import {\n normalizeRequireTarget,\n resolveModuleReference,\n} from \"../module-resolution\";\n\nimport type { SyntaxNode } from \"../syntax\";\n\nimport type {\n DiagnosticInput,\n FunctionInfo,\n RuleContext,\n RuleDefinition,\n StateBinding,\n} from \"../types\";\n\nimport { normalizeExpressionText, sameNode } from \"../ast/walk\";\nimport { reactApiPath, resolveLocalValue } from \"../ast/local-values\";\nimport { freshValueKind } from \"../ast/value-identity\";\nimport { isHighFrequencyRunServiceCall } from \"../roblox-semantics\";\n\nimport {\n callNameNode,\n declarationNames,\n identifierNode,\n fieldName,\n fieldNameNode,\n fieldValue,\n isBindingShadowedBetween,\n stateBindingsFor,\n} from \"./helpers\";\n\nconst STATIC_DISCOVERY = /(?::|\\.)(GetChildren|GetDescendants)$/;\n\nconst PURE_TRIVIAL_CALLS =\n /^(?:tostring|tonumber|type|typeof|math\\.[A-Za-z_][A-Za-z0-9_]*|string\\.(?:lower|upper|format|len)|Color3\\.(?:new|fromRGB|fromHSV)|Vector[23]\\.new|UDim2?\\.(?:new|fromOffset|fromScale)|CFrame\\.new)$/;\n\nfunction declarationForCall(call: SyntaxNode): SyntaxNode | null {\n let current: SyntaxNode | null = call.parent;\n\n while (current) {\n if (current.type === \"variable_declaration\") return current;\n\n if (\n current.type === \"function_definition\" ||\n current.type === \"function_declaration\"\n )\n return null;\n\n current = current.parent;\n }\n\n return null;\n}\n\nfunction declaredNameForCall(call: SyntaxNode): string | null {\n const declaration = declarationForCall(call);\n\n return declaration ? (declarationNames(declaration)[0] ?? null) : null;\n}\n\nfunction isIdentifierPropertyName(node: SyntaxNode): boolean {\n const parent = node.parent;\n\n if (parent?.type === \"dot_index_expression\")\n return sameNode(parent.childForFieldName(\"field\"), node);\n\n if (parent?.type === \"method_index_expression\") {\n return (\n sameNode(parent.childForFieldName(\"method\"), node) ||\n sameNode(parent.namedChildren.at(-1), node)\n );\n }\n\n return false;\n}\n\nfunction identifierReferences(\n context: RuleContext,\n owner: FunctionInfo,\n name: string,\n declaration: SyntaxNode | null,\n): SyntaxNode[] {\n if (!owner.body) return [];\n\n const result: SyntaxNode[] = [];\n\n for (const node of context.walk(owner.body)) {\n if (node.type !== \"identifier\" || node.text !== name) continue;\n\n if (\n declaration &&\n node.startIndex >= declaration.startIndex &&\n node.endIndex <= declaration.endIndex\n )\n continue;\n\n if (isIdentifierPropertyName(node)) continue;\n\n if (isBindingShadowedBetween(node, owner, name, declaration)) continue;\n\n result.push(node);\n }\n\n return result;\n}\n\nfunction nearestAncestor(\n node: SyntaxNode,\n stop: SyntaxNode,\n type: string,\n): SyntaxNode | null {\n let current = node.parent;\n\n while (current && !sameNode(current, stop)) {\n if (current.type === type) return current;\n\n current = current.parent;\n }\n\n return null;\n}\n\nfunction highFrequencyCallback(\n node: SyntaxNode,\n context: RuleContext,\n): SyntaxNode | null {\n let current = node.parent;\n\n while (current) {\n if (current.type === \"function_definition\") {\n const argumentsNode = current.parent;\n\n const call =\n argumentsNode?.type === \"arguments\" ? argumentsNode.parent : null;\n\n if (\n call?.type === \"function_call\" &&\n isHighFrequencyRunServiceCall(call, context)\n )\n return current;\n }\n\n current = current.parent;\n }\n\n return null;\n}\n\nfunction setterIsNoChangeGuarded(\n call: SyntaxNode,\n callback: SyntaxNode,\n binding: StateBinding,\n): boolean {\n let current = call.parent;\n\n while (current && !sameNode(current, callback)) {\n if (current.type === \"if_statement\" || current.type === \"if_expression\") {\n const header = current.text.split(/\\bthen\\b/s, 1)[0] ?? \"\";\n const escaped = binding.valueName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n if (\n new RegExp(\n `\\\\b${escaped}\\\\b[^\\\\n]*(?:~=|==)|(?:~=|==)[^\\\\n]*\\\\b${escaped}\\\\b`,\n ).test(header)\n )\n return true;\n }\n\n current = current.parent;\n }\n\n return false;\n}\n\nfunction setterIsOneShotGuarded(\n call: SyntaxNode,\n callback: SyntaxNode,\n): boolean {\n let current = call.parent;\n\n while (current && !sameNode(current, callback)) {\n if (current.type === \"if_statement\") {\n const header = current.text.split(/\\bthen\\b/s, 1)[0] ?? \"\";\n\n const candidates = [\n ...header.matchAll(/\\bnot\\s+([A-Za-z_][A-Za-z0-9_]*)\\b/g),\n ...header.matchAll(/\\b([A-Za-z_][A-Za-z0-9_]*)\\s*==\\s*false\\b/g),\n ].map((match) => match[1]);\n\n for (const guard of candidates) {\n const escaped = guard.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n if (!new RegExp(`\\\\b${escaped}\\\\s*=\\\\s*true\\\\b`).test(current.text))\n continue;\n\n if (new RegExp(`\\\\b${escaped}\\\\s*=\\\\s*false\\\\b`).test(callback.text))\n continue;\n\n return true;\n }\n }\n\n current = current.parent;\n }\n\n return false;\n}\n\nfunction componentRenderCost(\n context: RuleContext,\n owner: FunctionInfo,\n): string[] {\n if (!owner.body) return [];\n\n let clones = 0;\n let loops = 0;\n let discovery = 0;\n\n for (const node of context.walk(owner.body)) {\n if (context.nearestFunction(node) !== owner) continue;\n\n if (\n node.type === \"for_statement\" ||\n node.type === \"while_statement\" ||\n node.type === \"repeat_statement\"\n )\n loops += 1;\n\n if (node.type !== \"function_call\") continue;\n\n const path = context.resolveCallPath(context.getCallPath(node) ?? \"\");\n\n if (path === \"table.clone\") clones += 1;\n\n if (STATIC_DISCOVERY.test(path) || /:GetTagged$/.test(path)) discovery += 1;\n }\n\n const parts: string[] = [];\n\n if (clones > 0) parts.push(`${clones} table clone${clones === 1 ? \"\" : \"s\"}`);\n\n if (loops > 1) parts.push(`${loops} collection/loop passes`);\n\n if (discovery > 0)\n parts.push(\n `${discovery} Instance discovery call${discovery === 1 ? \"\" : \"s\"}`,\n );\n\n return parts;\n}\n\nfunction memoizedComponentKind(\n context: RuleContext,\n expression: SyntaxNode,\n): \"shallow\" | \"custom\" | null {\n const binding = resolveLocalValue(context, expression);\n\n if (\n !binding ||\n binding.returnIndex !== 0 ||\n binding.value.type !== \"function_call\"\n )\n return null;\n\n const call = binding.value;\n\n if (reactApiPath(context, call) === \"React.memo\") {\n return context.callArguments(call).length > 1 ? \"custom\" : \"shallow\";\n }\n\n const target = context.callArguments(call)[0];\n\n if (context.getCallPath(call) !== \"require\" || !target) return null;\n\n return (\n resolveModuleReference(\n normalizeRequireTarget(target.text),\n context.project.memoizedModules,\n ) ?? null\n );\n}\n\nfunction fieldLabel(field: SyntaxNode): string {\n return fieldName(field) ?? field.childForFieldName(\"name\")?.text ?? \"prop\";\n}\n\nexport const rerenderUnstableMemoProps: RuleDefinition = {\n id: \"react-luau/rerender-unstable-memo-props\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Warn when props created during render can defeat shallow React.memo comparisons\",\n\n guidance: {\n explanation:\n \"New tables, functions, and reference objects compare unequal even when their contents match\",\n\n help: \"Stabilize props that change each render if this child is expensive, move construction into the child, or remove ineffective memoization\",\n },\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const call of context.findCalls()) {\n if (\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\n \"React.createElement\"\n )\n continue;\n\n const component = context.containingComponent(call);\n\n if (!component || context.nearestFunction(call) !== component) continue;\n\n const args = context.callArguments(call);\n const childName = args[0]?.text.trim() ?? \"\";\n\n if (!args[0] || memoizedComponentKind(context, args[0]) !== \"shallow\")\n continue;\n\n const propsBinding = args[1] && resolveLocalValue(context, args[1]);\n const props = propsBinding?.returnIndex === 0 ? propsBinding.value : null;\n\n if (\n !props ||\n props.type !== \"table_constructor\" ||\n context.nearestFunction(props) !== component\n )\n continue;\n\n const unstableFields = props.namedChildren\n .filter((node) => node.type === \"field\")\n .filter((field) =>\n freshValueKind(context, fieldValue(field), component),\n );\n\n if (unstableFields.length === 0) continue;\n\n const unstable = unstableFields.map(fieldLabel);\n const highlights = unstableFields.map(fieldNameNode);\n\n diagnostics.push({\n node: highlights[0],\n highlights,\n severity: \"warning\",\n message: `Memoized ${childName} can receive fresh ${unstable.join(\", \")} prop${unstable.length === 1 ? \"\" : \"s\"} when its parent renders`,\n summary: `${childName} gets ${unstable.length} ${unstable.length === 1 ? \"prop\" : \"props\"} created during render that can prevent memoization from skipping it`,\n\n editorRanges: highlights.map((node, index) => ({\n node,\n summary: `${childName} gets a ${unstable[index]} prop created during render that can prevent memoization from skipping it`,\n })),\n\n help: \"Fresh reference identity can prevent the shallow memo comparison from skipping this child. Stabilize the prop when the parent rerenders frequently, move construction into the child, or remove ineffective memoization\",\n });\n }\n\n return diagnostics;\n },\n};\n\nexport const rerenderHighFrequencyState: RuleDefinition = {\n id: \"react-luau/rerender-high-frequency-state\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Find state updates from frame callbacks that can rerender expensive component trees continuously.\",\n\n guidance: {\n explanation:\n \"Doctor found a state setter on a high-frequency callback path. Calling a setter every frame still has overhead, and any changed value can schedule React reconciliation. This rule now suppresses simple one-shot guards it can prove.\",\n\n caveat:\n \"A same-value state update can be bailed out by React, so this finding does not prove that the component actually rerenders every frame. It flags the per-frame setter path and is suppressed when Doctor can prove a simple one-shot or direct no-change guard.\",\n },\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n const seen = new Set<string>();\n\n for (const call of context.findCalls()) {\n const callback = highFrequencyCallback(call, context);\n\n if (!callback) continue;\n\n const component = context.containingComponent(call);\n\n if (!component) continue;\n\n const setter = context.getCallPath(call) ?? \"\";\n\n const binding = context.model.stateBindings.find(\n (candidate) =>\n candidate.owner === component && candidate.setterName === setter,\n );\n\n if (\n !binding ||\n setterIsNoChangeGuarded(call, callback, binding) ||\n setterIsOneShotGuarded(call, callback)\n )\n continue;\n\n const key = `${callback.startIndex}:${setter}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n const renderCost = componentRenderCost(context, component);\n\n diagnostics.push({\n node: callNameNode(binding.call),\n severity: \"warning\",\n message: `${binding.valueName} has a state setter called from a per-frame callback and may cause frequent rerenders when its value changes.`,\n\n help:\n renderCost.length > 0\n ? `This render also performs ${renderCost.join(\" and \")}. Isolate or throttle the high-frequency state, or use Bindings for host-property-only updates.`\n : \"Isolate or throttle the high-frequency state. Use React.useBinding when the value only drives host Instance properties.\",\n });\n }\n\n return diagnostics;\n },\n};\n\nfunction singleReturnExpression(\n callback: SyntaxNode | undefined,\n): SyntaxNode | null {\n if (!callback || callback.type !== \"function_definition\") return null;\n\n const body = callback.childForFieldName(\"body\");\n\n if (!body || body.namedChildren.length !== 1) return null;\n\n const statement = body.namedChildren[0];\n\n if (statement.type !== \"return_statement\") return null;\n\n const expressionList = statement.namedChildren.find(\n (child) => child.type === \"expression_list\",\n );\n\n if (!expressionList || expressionList.namedChildren.length !== 1) return null;\n\n return expressionList.namedChildren[0] ?? null;\n}\n\nfunction isTrivialMemoExpression(\n expression: SyntaxNode,\n context: RuleContext,\n): boolean {\n if (\n expression.type === \"table_constructor\" ||\n expression.type === \"function_definition\"\n )\n return false;\n\n let calls = 0;\n\n for (const node of context.walk(expression)) {\n if (\n node.type === \"for_statement\" ||\n node.type === \"while_statement\" ||\n node.type === \"repeat_statement\"\n )\n return false;\n\n if (node.type !== \"function_call\") continue;\n\n calls += 1;\n const path = context.resolveCallPath(context.getCallPath(node) ?? \"\");\n\n if (/random|GenerateGUID|GetServerTimeNow|tick|time|clock/i.test(path))\n return false;\n\n if (!PURE_TRIVIAL_CALLS.test(path)) return false;\n }\n\n return calls <= 2 && expression.text.length <= 180;\n}\n\nfunction valueIdentityIsObservedByHook(\n context: RuleContext,\n owner: FunctionInfo,\n name: string,\n declaration: SyntaxNode,\n): boolean {\n if (!owner.body) return false;\n\n for (const call of context.walk(owner.body)) {\n if (call.type !== \"function_call\") continue;\n\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (!/^React\\.use(?:Effect|LayoutEffect|Memo|Callback)$/.test(path))\n continue;\n\n const dependencies = context.callArguments(call)[1];\n\n if (!dependencies) continue;\n\n for (const reference of identifierReferences(\n context,\n owner,\n name,\n declaration,\n )) {\n if (\n reference.startIndex >= dependencies.startIndex &&\n reference.endIndex <= dependencies.endIndex\n )\n return true;\n }\n }\n\n return false;\n}\n\nfunction isEmptyDependencyTable(node: SyntaxNode | undefined): boolean {\n return Boolean(\n node &&\n node.type === \"table_constructor\" &&\n node.namedChildren.length === 0,\n );\n}\n\nexport const rerenderUnnecessaryUseMemo: RuleDefinition = {\n id: \"react-luau/rerender-unnecessary-usememo\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Find trivial derived values that cost more to memoize than to compute directly.\",\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const call of context.findCalls()) {\n if (\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\n \"React.useMemo\"\n )\n continue;\n\n const owner =\n context.containingComponent(call) ?? context.nearestFunction(call);\n\n const declaration = declarationForCall(call);\n const name = declaredNameForCall(call);\n const argumentsList = context.callArguments(call);\n const expression = singleReturnExpression(argumentsList[0]);\n\n if (isEmptyDependencyTable(argumentsList[1])) continue;\n\n if (\n !owner ||\n !declaration ||\n !name ||\n !expression ||\n !isTrivialMemoExpression(expression, context)\n )\n continue;\n\n if (valueIdentityIsObservedByHook(context, owner, name, declaration))\n continue;\n\n diagnostics.push({\n node: callNameNode(call),\n message: \"useMemo caches a trivial derived value.\",\n help: \"Compute the value directly unless stable identity or a genuinely expensive calculation is required.\",\n });\n }\n\n return diagnostics;\n },\n};\n\nfunction isOnlyDirectFunctionCallReference(\n node: SyntaxNode,\n name: string,\n): boolean {\n const parent = node.parent;\n\n return (\n parent?.type === \"function_call\" &&\n sameNode(parent.childForFieldName(\"name\"), node) &&\n (parent.childForFieldName(\"name\")?.text.trim() ?? \"\") === name\n );\n}\n\nexport const rerenderUnnecessaryUseCallback: RuleDefinition = {\n id: \"react-luau/rerender-unnecessary-usecallback\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Find useCallback values whose stable function identity is never observed.\",\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const call of context.findCalls()) {\n if (\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\n \"React.useCallback\"\n )\n continue;\n\n const owner =\n context.containingComponent(call) ?? context.nearestFunction(call);\n\n const declaration = declarationForCall(call);\n const name = declaredNameForCall(call);\n\n if (!owner || !declaration || !name) continue;\n\n const references = identifierReferences(\n context,\n owner,\n name,\n declaration,\n );\n\n if (\n references.length === 0 ||\n references.some(\n (node) => !isOnlyDirectFunctionCallReference(node, name),\n )\n )\n continue;\n\n diagnostics.push({\n node: callNameNode(call),\n message: `${name} is wrapped in useCallback, but its identity is never observed.`,\n help: \"Use a normal local function. Keep useCallback when the function is passed to a memoized child, retained by another hook, or otherwise compared by identity.\",\n });\n }\n\n return diagnostics;\n },\n};\n\nfunction staticDiscoveryPath(path: string): boolean {\n if (/:GetTagged$/.test(path)) return true;\n\n if (!STATIC_DISCOVERY.test(path)) return false;\n\n const receiver = path.replace(/(?::|\\.)(?:GetChildren|GetDescendants)$/, \"\");\n\n return /^(?:ReplicatedStorage|ServerStorage|ServerScriptService|StarterGui|StarterPlayer|script)(?:\\.|:|$)/.test(\n receiver,\n );\n}\n\nexport const rerenderStaticDiscoveryInRender: RuleDefinition = {\n id: \"react-luau/rerender-static-discovery-in-render\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Find static Instance/module discovery repeated during component render.\",\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const call of context.findCalls()) {\n const component = context.containingComponent(call);\n\n if (!component || context.nearestFunction(call) !== component) continue;\n\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (!staticDiscoveryPath(path)) continue;\n\n const loop = nearestAncestor(call, component.node, \"for_statement\");\n const body = loop?.childForFieldName(\"body\");\n\n const requiresModules = Boolean(\n body &&\n [...context.walk(body)].some(\n (node) =>\n node.type === \"function_call\" &&\n context.getCallPath(node) === \"require\",\n ),\n );\n\n diagnostics.push({\n node: callNameNode(call),\n severity: \"warning\",\n message: `${path} runs during component render${requiresModules ? \" and feeds module requires\" : \"\"}.`,\n\n help: requiresModules\n ? \"Discover and require static modules once outside the component, or cache the derived catalog by the inputs that can actually change.\"\n : \"Move static discovery outside the component or memoize the derived result when the source can change.\",\n });\n }\n\n return diagnostics;\n },\n};\n\nfunction genericLoopCollection(loop: SyntaxNode): string | null {\n const clause = loop.namedChildren.find(\n (child) => child.type === \"for_generic_clause\",\n );\n\n if (!clause) return null;\n\n const match = clause.text.match(/\\bin\\s+(.+)$/s);\n\n if (!match) return null;\n\n const expression = normalizeExpressionText(match[1]);\n\n if (!expression || expression.length > 160) return null;\n\n return expression;\n}\n\nexport const rerenderRepeatedCollectionScan: RuleDefinition = {\n id: \"react-luau/rerender-repeated-collection-scan\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Find repeated direct render passes over the same collection expression.\",\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const component of context.model.functions) {\n if (!component.isComponent || !component.body) continue;\n\n const groups = new Map<\n string,\n { display: string; loops: SyntaxNode[] }\n >();\n\n for (const node of context.walk(component.body)) {\n if (\n node.type !== \"for_statement\" ||\n context.nearestFunction(node) !== component\n )\n continue;\n\n const collection = genericLoopCollection(node);\n\n if (!collection || collection === \"{}\") continue;\n\n const clause = node.namedChildren.find(\n (child) => child.type === \"for_generic_clause\",\n );\n\n const display =\n clause?.text\n .match(/\\bin\\s+(.+)$/s)?.[1]\n ?.trim()\n .replace(/\\s+/g, \" \") ?? collection;\n\n const group = groups.get(collection) ?? { display, loops: [] };\n group.loops.push(node);\n groups.set(collection, group);\n }\n\n for (const { display, loops } of groups.values()) {\n if (loops.length < 2) continue;\n\n const repeatedCollections = loops.map((loop) => {\n const clause = loop.namedChildren.find(\n (child) => child.type === \"for_generic_clause\",\n );\n\n return clause?.namedChildren.at(-1) ?? clause ?? loop;\n });\n\n diagnostics.push({\n node: repeatedCollections[1],\n highlights: repeatedCollections,\n message: `${display} is scanned ${loops.length} times during this render.`,\n help: \"Consider combining the passes or deriving a lookup when the collection is large or the component rerenders frequently.\",\n });\n }\n }\n\n return diagnostics;\n },\n};\n\nexport const rerenderStaticState: RuleDefinition = {\n id: \"react-luau/rerender-static-state\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Find React state whose setter is never used and therefore cannot change.\",\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const component of context.model.functions) {\n if (!component.isComponent || !component.body) continue;\n\n for (const binding of stateBindingsFor(context, component)) {\n if (binding.setterName === \"_\" || binding.setterName.startsWith(\"_\"))\n continue;\n\n const setterRefs = identifierReferences(\n context,\n component,\n binding.setterName,\n binding.declaration,\n );\n\n if (setterRefs.length > 0) continue;\n\n const valueRefs = identifierReferences(\n context,\n component,\n binding.valueName,\n binding.declaration,\n );\n\n if (valueRefs.length === 0) continue;\n\n diagnostics.push({\n node:\n identifierNode(binding.declaration, binding.setterName) ??\n binding.declaration,\n\n message: `${binding.valueName} cannot change because ${binding.setterName} is never used.`,\n help: \"Use a normal derived value. If the initial value must be captured once for the component lifetime, use a ref.\",\n });\n }\n }\n\n return diagnostics;\n },\n};\n\nfunction memoReturnsCurrentCell(\n call: SyntaxNode,\n context: RuleContext,\n): boolean {\n const args = context.callArguments(call);\n const callback = args[0];\n const deps = args[1];\n\n if (\n !callback ||\n callback.type !== \"function_definition\" ||\n deps?.type !== \"table_constructor\" ||\n deps.namedChildren.length > 0\n )\n return false;\n\n const expression = singleReturnExpression(callback);\n\n if (!expression || expression.type !== \"table_constructor\") return false;\n\n const fields = expression.namedChildren.filter(\n (node) => node.type === \"field\",\n );\n\n return fields.length === 1 && fieldName(fields[0]) === \"current\";\n}\n\nexport const preferUseRefForMutableCell: RuleDefinition = {\n id: \"react-luau/prefer-use-ref-for-mutable-cell\",\n category: \"Hooks\",\n severity: \"suggestion\",\n\n description:\n \"Prefer useRef over useMemo-created tables that only emulate a mutable current cell.\",\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n for (const call of context.findCalls()) {\n if (\n context.resolveCallPath(context.getCallPath(call) ?? \"\") !==\n \"React.useMemo\"\n )\n continue;\n\n if (!memoReturnsCurrentCell(call, context)) continue;\n\n const name = declaredNameForCall(call) ?? \"This value\";\n\n diagnostics.push({\n node: callNameNode(call),\n message: `${name} uses useMemo to create a { current = ... } mutable cell.`,\n help: \"Use React.useRef(initialValue) to express the same lifetime and mutable-cell intent directly.\",\n });\n }\n\n return diagnostics;\n },\n};\n",
33
35
  "import type { SyntaxNode } from \"../syntax\";\n\nimport {\n normalizeRequireTarget,\n resolveModuleReference,\n} from \"../module-resolution\";\n\nimport type {\n BindingCandidateHookSummary,\n ExternalCallbackFunctionSummary,\n FixPreview,\n FunctionInfo,\n RuleContext,\n RuleDefinition,\n StateBinding,\n} from \"../types\";\n\nimport { sameNode } from \"../ast/walk\";\n\nimport {\n isHighFrequencyRobloxCall,\n isHighFrequencyRobloxExpression,\n} from \"../roblox-semantics\";\n\nimport {\n callNameNode,\n declarationNames,\n fieldName,\n fieldValue,\n isBindingShadowedBetween,\n} from \"./helpers\";\n\nconst EXTERNAL_CALLBACK =\n /(?:^|[.:])(?:Connect|Subscribe|Observe|Listen|Watch|onStep|onUpdate|onChange|onChanged)$/i;\n\nconst PERSISTENT_MIRROR_CALLBACK =\n /(?:^|[.:])(?:Connect|Subscribe|Observe|Listen|Watch|onStep|onUpdate|onChange|onChanged)$/i;\n\nconst LIKELY_CONTINUOUS_CALLBACK = /(?:^|[.:])onStep$/i;\nconst NON_BINDABLE_HOST_FIELDS = new Set([\"ref\", \"key\", \"children\"]);\n\nfunction replaceWithinNode(\n container: SyntaxNode,\n target: SyntaxNode,\n replacement: string,\n): string | null {\n const start = target.startIndex - container.startIndex;\n const end = target.endIndex - container.startIndex;\n\n if (start < 0 || end < start || end > container.text.length) return null;\n\n return `${container.text.slice(0, start)}${replacement}${container.text.slice(end)}`;\n}\n\nfunction bindingModeFixPreview(\n summary: BindingCandidateHookSummary,\n call: SyntaxNode,\n context: RuleContext,\n directlySubstitutable: boolean,\n): FixPreview | undefined {\n const parameterIndex = summary.bindingModeParameterIndex;\n\n if (parameterIndex === undefined || summary.bindingWhenTruthy === undefined)\n return undefined;\n\n const desired = summary.bindingWhenTruthy ? \"true\" : \"false\";\n const args = context.callArguments(call);\n\n const derivationNote = directlySubstitutable\n ? \"\"\n : \" Also convert visual derivations of the returned value to Binding:map (or React.joinBindings for multiple Bindings); changing this argument alone is not a complete fix.\";\n\n if (parameterIndex < args.length) {\n const after = replaceWithinNode(call, args[parameterIndex], desired);\n\n if (!after || after === call.text) return undefined;\n\n return {\n kind: directlySubstitutable ? \"exact\" : \"pattern\",\n before: call.text,\n after,\n\n note:\n (summary.bindingModeParameterName\n ? `Switch the ${summary.bindingModeParameterName} parameter to the hook's Binding mode.`\n : \"Switch this call to the hook's Binding mode.\") + derivationNote,\n };\n }\n\n if (parameterIndex >= args.length) {\n const close = call.text.lastIndexOf(\")\");\n\n if (close < 0) return undefined;\n\n // Omitted Lua/Luau arguments are nil. Fill any skipped optional parameters\n // explicitly so the inferred Binding-mode argument lands in the right slot.\n const skipped = Array.from(\n { length: parameterIndex - args.length },\n () => \"nil\",\n );\n\n const appended = [...skipped, desired].join(\", \");\n const insertion = `${args.length > 0 ? \", \" : \"\"}${appended}`;\n\n return {\n kind: directlySubstitutable ? \"exact\" : \"pattern\",\n before: call.text,\n after: `${call.text.slice(0, close)}${insertion}${call.text.slice(close)}`,\n\n note:\n (summary.bindingModeParameterName\n ? `Enable the hook's Binding mode through the ${summary.bindingModeParameterName} parameter without changing omitted optional arguments.`\n : \"Enable the hook's Binding mode without changing omitted optional arguments.\") +\n derivationNote,\n };\n }\n\n return undefined;\n}\n\nfunction callMemberFixPreview(\n call: SyntaxNode,\n replacement: string,\n): FixPreview | undefined {\n const name = callNameNode(call);\n const path = name.text;\n const separator = Math.max(path.lastIndexOf(\".\"), path.lastIndexOf(\":\"));\n const member = separator >= 0 ? path.slice(separator + 1) : path;\n\n const replacementName =\n separator >= 0\n ? `${path.slice(0, separator + 1)}${replacement}`\n : replacement;\n\n const after = replaceWithinNode(call, name, replacementName);\n\n if (!after || member === replacement) return undefined;\n\n return { kind: \"exact\", before: call.text, after };\n}\n\nfunction useBindingFixPreview(call: SyntaxNode): FixPreview | undefined {\n const name = callNameNode(call);\n const current = name.text;\n\n const afterName = current.replace(/(?:^|\\.)useState$/, (match) =>\n match.replace(\"useState\", \"useBinding\"),\n );\n\n if (afterName === current) return undefined;\n\n const after = replaceWithinNode(call, name, afterName);\n\n return after ? { kind: \"exact\", before: call.text, after } : undefined;\n}\n\ninterface ImportedBindingSummaries {\n hooks: Map<string, BindingCandidateHookSummary>;\n callbacks: Map<string, ExternalCallbackFunctionSummary>;\n compatibleProps: Map<string, Set<string>>;\n}\n\nconst importedBindingSummariesCache = new WeakMap<\n RuleContext,\n ImportedBindingSummaries\n>();\n\nfunction importedBindingSummaries(\n context: RuleContext,\n): ImportedBindingSummaries {\n const cached = importedBindingSummariesCache.get(context);\n\n if (cached) return cached;\n\n const result: ImportedBindingSummaries = {\n hooks: new Map(),\n callbacks: new Map(),\n compatibleProps: new Map(),\n };\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\n\n const match = node.text.match(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\n );\n\n if (!match) continue;\n\n const [, localName, target] = match;\n const normalizedTarget = normalizeRequireTarget(target);\n\n const hook = resolveModuleReference(\n normalizedTarget,\n context.project.bindingCandidateHooks,\n );\n\n if (hook) result.hooks.set(localName, hook);\n\n const callback = resolveModuleReference(\n normalizedTarget,\n context.project.externalCallbackModules,\n );\n\n if (callback) result.callbacks.set(localName, callback);\n\n const compatibleProps = resolveModuleReference(\n normalizedTarget,\n context.project.bindingCompatibleComponentProps,\n );\n\n if (compatibleProps) result.compatibleProps.set(localName, compatibleProps);\n }\n\n importedBindingSummariesCache.set(context, result);\n\n return result;\n}\n\nfunction importedBindingCandidateHooks(\n context: RuleContext,\n): Map<string, BindingCandidateHookSummary> {\n return importedBindingSummaries(context).hooks;\n}\n\nfunction importedExternalCallbackFunctions(\n context: RuleContext,\n): Map<string, ExternalCallbackFunctionSummary> {\n return importedBindingSummaries(context).callbacks;\n}\n\nfunction importedBindingCompatibleComponentProps(\n context: RuleContext,\n): Map<string, Set<string>> {\n return importedBindingSummaries(context).compatibleProps;\n}\n\nfunction declarationForCall(call: SyntaxNode): SyntaxNode | null {\n let current: SyntaxNode | null = call.parent;\n\n while (current) {\n if (current.type === \"variable_declaration\") return current;\n\n if (\n current.type === \"function_definition\" ||\n current.type === \"function_declaration\"\n )\n return null;\n\n current = current.parent;\n }\n\n return null;\n}\n\nconst TRANSPARENT_PARENTS = new Set([\n \"binary_expression\",\n \"unary_expression\",\n \"parenthesized_expression\",\n \"cast_expression\",\n \"type_cast_expression\",\n \"interpolated_string\",\n \"string_interpolation\",\n \"expression_list\",\n \"assignment_statement\",\n \"dot_index_expression\",\n \"method_index_expression\",\n \"table_constructor\",\n \"field\",\n]);\n\nconst PURE_BINDING_DERIVATION_CALL =\n /^(?:tostring|tonumber|type|typeof|math\\.[A-Za-z_][A-Za-z0-9_]*|string\\.[A-Za-z_][A-Za-z0-9_]*|utf8\\.[A-Za-z_][A-Za-z0-9_]*|bit32\\.[A-Za-z_][A-Za-z0-9_]*|(?:UDim|UDim2|Vector2|Vector3|Color3|CFrame|Rect|NumberRange|NumberSequence|ColorSequence|BrickColor|Font)\\.[A-Za-z_][A-Za-z0-9_]*)$/;\n\nconst HOST_FEEDBACK_PROPERTIES = new Set([\n \"AbsoluteSize\",\n \"AbsolutePosition\",\n \"AbsoluteRotation\",\n \"AbsoluteContentSize\",\n \"AbsoluteCanvasSize\",\n \"AbsoluteCellSize\",\n \"AbsoluteCellCount\",\n \"TextBounds\",\n \"CanvasPosition\",\n]);\n\nconst LIKELY_CONTINUOUS_PROPERTIES = new Set([\n \"CFrame\",\n \"WorldCFrame\",\n \"Position\",\n \"WorldPosition\",\n \"Rotation\",\n \"Orientation\",\n \"CanvasPosition\",\n \"PlaybackLoudness\",\n \"TimePosition\",\n]);\n\nconst SEMANTIC_SNAPSHOT_EXPRESSION =\n /\\b(?:getState|getSnapshot|snapshot|selector|select|table\\s*\\.\\s*(?:clone|freeze|move))\\b|(?:\\.|\\[\\s*[\"'])State(?:\\b|[\"']\\s*\\])/i;\n\nfunction isBindingMapSafeCall(call: SyntaxNode, context: RuleContext): boolean {\n if (call.type !== \"function_call\") return false;\n\n const path = context\n .resolveCallPath(context.getCallPath(call) ?? \"\")\n .replace(/\\s+/g, \"\");\n\n return PURE_BINDING_DERIVATION_CALL.test(path);\n}\n\nfunction isTransparentParent(\n parent: SyntaxNode,\n context: RuleContext,\n): boolean {\n if (parent.type === \"function_call\")\n return isBindingMapSafeCall(parent, context);\n\n if (parent.type === \"arguments\") {\n return (\n parent.parent?.type === \"function_call\" &&\n isBindingMapSafeCall(parent.parent, context)\n );\n }\n\n return TRANSPARENT_PARENTS.has(parent.type);\n}\n\nfunction stringLiteralValue(node: SyntaxNode | undefined): string | null {\n if (!node) return null;\n\n return node.text.trim().match(/^[\"']([^\"']+)[\"']$/)?.[1] ?? null;\n}\n\nfunction observedPropertyForCall(\n summary: BindingCandidateHookSummary,\n call: SyntaxNode,\n context: RuleContext,\n): string | null {\n if (summary.observedPropertyName) return summary.observedPropertyName;\n\n if (summary.observedPropertyParameterIndex === undefined) return null;\n\n return stringLiteralValue(\n context.callArguments(call)[summary.observedPropertyParameterIndex],\n );\n}\n\nfunction isStrongHostFeedbackProperty(\n property: string | null | undefined,\n): boolean {\n return Boolean(property && HOST_FEEDBACK_PROPERTIES.has(property));\n}\n\nfunction isInside(node: SyntaxNode, ancestor: SyntaxNode): boolean {\n let current: SyntaxNode | null = node;\n\n while (current) {\n if (sameNode(current, ancestor)) return true;\n\n current = current.parent;\n }\n\n return false;\n}\n\nfunction isIdentifierPropertyName(node: SyntaxNode): boolean {\n const parent = node.parent;\n\n if (parent?.type === \"dot_index_expression\")\n return sameNode(parent.childForFieldName(\"field\"), node);\n\n if (parent?.type === \"method_index_expression\")\n return (\n sameNode(parent.childForFieldName(\"method\"), node) ||\n sameNode(parent.namedChildren.at(-1), node)\n );\n\n return false;\n}\n\nfunction isReadNode(\n node: SyntaxNode,\n valueName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n): boolean {\n if (node.type !== \"identifier\" || node.text !== valueName) return false;\n\n if (isInside(node, declaration)) return false;\n\n if (isIdentifierPropertyName(node)) return false;\n\n if (isBindingShadowedBetween(node, owner, valueName, declaration))\n return false;\n\n const parent = node.parent;\n\n if (parent?.type === \"variable_list\" || parent?.type === \"typed_identifier\")\n return false;\n\n if (\n parent?.type === \"field\" &&\n !sameNode(fieldValue(parent), node) &&\n /^[A-Za-z_][A-Za-z0-9_]*\\s*=/.test(parent.text.trim())\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction hasAnyRead(\n valueName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n context: RuleContext,\n): boolean {\n if (!owner.body) return false;\n\n return [...context.walk(owner.body)].some((node) =>\n isReadNode(node, valueName, owner, declaration),\n );\n}\n\nfunction isCreateElementCall(call: SyntaxNode, context: RuleContext): boolean {\n return (\n call.type === \"function_call\" &&\n context.resolveCallPath(context.getCallPath(call) ?? \"\") ===\n \"React.createElement\"\n );\n}\n\nfunction isHostCreateElementCall(\n call: SyntaxNode,\n context: RuleContext,\n): boolean {\n if (!isCreateElementCall(call, context)) return false;\n\n const args = context.callArguments(call);\n const host = args[0]?.text.trim() ?? \"\";\n\n return /^(?:\"[^\"]+\"|'[^']+')$/.test(host);\n}\n\nfunction isTransparentUsage(\n node: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): boolean {\n let current: SyntaxNode | null = node;\n\n while (current) {\n const parent: SyntaxNode | null = current.parent;\n\n if (!parent) return false;\n\n if (parent.type === \"field\") {\n const value = fieldValue(parent);\n\n if (!value || !sameNode(value, current)) return false;\n\n const property = fieldName(parent);\n\n if (!property || NON_BINDABLE_HOST_FIELDS.has(property)) return false;\n\n const table = parent.parent;\n\n if (table?.type !== \"table_constructor\") return false;\n\n const args = table.parent;\n\n if (args?.type !== \"arguments\") return false;\n\n const call = args.parent;\n\n if (!call || !isCreateElementCall(call, context)) return false;\n\n if (!sameNode(context.callArguments(call)[1], table)) return false;\n\n if (isHostCreateElementCall(call, context)) return true;\n\n const component = context.callArguments(call)[0]?.text.trim() ?? \"\";\n\n return compatibleComponentProps.get(component)?.has(property) ?? false;\n }\n\n if (\n parent.type === \"if_statement\" ||\n parent.type === \"elseif_clause\" ||\n parent.type === \"while_statement\" ||\n parent.type === \"repeat_statement\" ||\n parent.type === \"return_statement\"\n ) {\n return false;\n }\n\n if (\n parent.type === \"function_definition\" ||\n parent.type === \"function_declaration\"\n )\n return false;\n\n if (!isTransparentParent(parent, context)) return false;\n\n current = parent;\n }\n\n return false;\n}\n\nfunction isDirectBindingValueUsage(\n node: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): boolean {\n let current: SyntaxNode | null = node;\n\n while (current) {\n const parent: SyntaxNode | null = current.parent;\n\n if (!parent) return false;\n\n if (\n parent.type === \"parenthesized_expression\" ||\n parent.type === \"cast_expression\" ||\n parent.type === \"type_cast_expression\"\n ) {\n current = parent;\n continue;\n }\n\n if (parent.type !== \"field\") return false;\n\n const value = fieldValue(parent);\n\n if (!value || !sameNode(value, current)) return false;\n\n const property = fieldName(parent);\n\n if (!property || NON_BINDABLE_HOST_FIELDS.has(property)) return false;\n\n const table = parent.parent;\n const args = table?.parent;\n const call = args?.parent;\n\n if (\n table?.type !== \"table_constructor\" ||\n args?.type !== \"arguments\" ||\n !call ||\n !isCreateElementCall(call, context)\n ) {\n return false;\n }\n\n if (!sameNode(context.callArguments(call)[1], table)) return false;\n\n if (isHostCreateElementCall(call, context)) return true;\n\n const component = context.callArguments(call)[0]?.text.trim() ?? \"\";\n\n return compatibleComponentProps.get(component)?.has(property) ?? false;\n }\n\n return false;\n}\n\nfunction allReadsDirectlyBindingSubstitutable(\n valueName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): boolean {\n if (!owner.body) return false;\n\n let reads = 0;\n\n for (const node of context.walk(owner.body)) {\n if (!isReadNode(node, valueName, owner, declaration)) continue;\n\n reads += 1;\n\n if (!isDirectBindingValueUsage(node, context, compatibleComponentProps))\n return false;\n }\n\n return reads > 0;\n}\n\nfunction isSimpleBindingDerivation(\n node: SyntaxNode,\n valueName: string,\n context: RuleContext,\n): boolean {\n if (node.type === \"identifier\") return node.text === valueName;\n\n if ([\"number\", \"string\", \"true\", \"false\", \"nil\"].includes(node.type))\n return true;\n\n if (node.type === \"dot_index_expression\") {\n const base = node.namedChildren[0];\n\n return Boolean(base && isSimpleBindingDerivation(base, valueName, context));\n }\n\n if (node.type === \"function_call\") {\n const path = context.getCallPath(node);\n\n if (path === \"math.random\" || path === \"math.randomseed\") return false;\n\n const root = path?.split(/[.:]/)[0];\n\n if (\n !root ||\n context.model.functions.some(\n (fn) => fn.parameters.includes(root) || fn.name === root,\n ) ||\n context.model.allNodes.some(\n (candidate) =>\n candidate.type === \"variable_declaration\" &&\n declarationNames(candidate).includes(root),\n )\n )\n return false;\n\n return (\n isBindingMapSafeCall(node, context) &&\n context\n .callArguments(node)\n .every((arg) => isSimpleBindingDerivation(arg, valueName, context))\n );\n }\n\n if (\n [\n \"binary_expression\",\n \"unary_expression\",\n \"parenthesized_expression\",\n ].includes(node.type)\n ) {\n return node.namedChildren.every((child) =>\n isSimpleBindingDerivation(child, valueName, context),\n );\n }\n\n return false;\n}\n\nfunction importedHookFixPreview(\n summary: BindingCandidateHookSummary,\n call: SyntaxNode,\n valueName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): FixPreview | undefined {\n const directlySubstitutable = allReadsDirectlyBindingSubstitutable(\n valueName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n );\n\n const preview = bindingModeFixPreview(\n summary,\n call,\n context,\n directlySubstitutable,\n );\n\n if (!preview || directlySubstitutable || !owner.body) return preview;\n\n if ((declaration.text.split(\"=\")[0] ?? \"\").includes(\":\")) return preview;\n\n const edits = new Map<number, { node: SyntaxNode; after: string }>();\n const sourceLines = context.source.split(/\\r?\\n/);\n\n edits.set(call.startIndex, { node: call, after: preview.after });\n\n for (const read of context.walk(owner.body)) {\n if (!isReadNode(read, valueName, owner, declaration)) continue;\n\n if (isDirectBindingValueUsage(read, context, compatibleComponentProps))\n continue;\n\n if (!isTransparentUsage(read, context, compatibleComponentProps))\n return preview;\n\n let field: SyntaxNode | null = read.parent;\n\n while (field && field.type !== \"field\") field = field.parent;\n\n if (!field) return preview;\n\n const expression = fieldValue(field);\n\n if (\n !expression ||\n !isSimpleBindingDerivation(expression, valueName, context)\n )\n return preview;\n\n if (edits.has(expression.startIndex)) continue;\n\n let mapped = expression.text;\n\n const reads = [...context.walk(expression)].filter((node) =>\n isReadNode(node, valueName, owner, declaration),\n );\n\n for (const node of reads.sort((a, b) => b.startIndex - a.startIndex)) {\n const start = node.startIndex - expression.startIndex;\n const end = node.endIndex - expression.startIndex;\n\n mapped = `${mapped.slice(0, start)}value${mapped.slice(end)}`;\n }\n\n const line = sourceLines[field.startPosition.row] ?? \"\";\n const indent = line.match(/^\\s*/)?.[0] ?? \"\";\n const unit = indent.includes(\"\\t\") ? \"\\t\" : \" \";\n\n edits.set(expression.startIndex, {\n node: expression,\n after: `${valueName}:map(function(value)\\n${indent}${unit}return ${mapped}\\n${indent}end)`,\n });\n }\n\n if (edits.size === 1) return preview;\n\n let after = owner.node.text;\n\n for (const edit of [...edits.values()].sort(\n (a, b) => b.node.startIndex - a.node.startIndex,\n )) {\n const start = edit.node.startIndex - owner.node.startIndex;\n const end = edit.node.endIndex - owner.node.startIndex;\n\n if (start < 0 || after.slice(start, end) !== edit.node.text) return preview;\n\n after = `${after.slice(0, start)}${edit.after}${after.slice(end)}`;\n }\n\n return {\n kind: \"exact\",\n before: owner.node.text,\n after,\n note: \"Enable the hook's Binding mode and map the derived visual properties from the returned Binding.\",\n };\n}\n\nfunction derivedLocalDeclarationForRead(\n node: SyntaxNode,\n context: RuleContext,\n): SyntaxNode | null {\n let current: SyntaxNode | null = node;\n\n while (current) {\n const parent: SyntaxNode | null = current.parent;\n\n if (!parent) return null;\n\n if (parent.type === \"variable_declaration\") return parent;\n\n if (\n parent.type === \"function_definition\" ||\n parent.type === \"function_declaration\"\n )\n return null;\n\n if (!isTransparentParent(parent, context)) return null;\n\n current = parent;\n }\n\n return null;\n}\n\nfunction opaqueDerivedLocalDeclarationForRead(\n node: SyntaxNode,\n context: RuleContext,\n): SyntaxNode | null {\n let current: SyntaxNode | null = node;\n\n while (current) {\n const parent: SyntaxNode | null = current.parent;\n\n if (!parent) return null;\n\n if (parent.type === \"variable_declaration\") return parent;\n\n if (\n parent.type === \"function_definition\" ||\n parent.type === \"function_declaration\"\n )\n return null;\n\n if (\n parent.type === \"if_statement\" ||\n parent.type === \"elseif_clause\" ||\n parent.type === \"while_statement\" ||\n parent.type === \"repeat_statement\" ||\n parent.type === \"for_statement\" ||\n parent.type === \"for_in_statement\" ||\n parent.type === \"return_statement\"\n )\n return null;\n\n if (parent.type === \"function_call\") {\n const path = context.resolveCallPath(context.getCallPath(parent) ?? \"\");\n\n // Values captured by React memo/effect hooks still rely on reconciliation\n // to recompute or re-run that hook. Do not treat the hook's result as an\n // opaque Binding derivation just because its dependency table mentions\n // the value.\n if (/^React\\.use(?:Memo|Callback|Effect|LayoutEffect)$/.test(path))\n return null;\n }\n\n if (\n !TRANSPARENT_PARENTS.has(parent.type) &&\n parent.type !== \"arguments\" &&\n parent.type !== \"function_call\"\n )\n return null;\n\n current = parent;\n }\n\n return null;\n}\n\nfunction stateReadsAreBindingCompatible(\n valueName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n visited = new Set<string>(),\n): boolean {\n if (!owner.body) return false;\n\n const visitKey = `${declaration.startIndex}:${valueName}`;\n\n if (visited.has(visitKey)) return false;\n\n visited.add(visitKey);\n\n let reads = 0;\n\n for (const node of context.walk(owner.body)) {\n if (!isReadNode(node, valueName, owner, declaration)) continue;\n\n reads += 1;\n\n if (isTransparentUsage(node, context, compatibleComponentProps)) continue;\n\n const derivedDeclaration = derivedLocalDeclarationForRead(node, context);\n\n const derivedNames = derivedDeclaration\n ? declarationNames(derivedDeclaration)\n : [];\n\n if (derivedDeclaration && derivedNames.length === 1) {\n if (\n stateReadsAreBindingCompatible(\n derivedNames[0],\n owner,\n derivedDeclaration,\n context,\n compatibleComponentProps,\n new Set(visited),\n )\n )\n continue;\n }\n\n return false;\n }\n\n return reads > 0;\n}\n\ninterface CallbackSourceEvidence {\n highFrequency: boolean;\n external: boolean;\n hostFeedbackProperties: Set<string>;\n genericExternal: boolean;\n}\n\ntype MirrorConfidence = \"strong\" | \"possible\" | \"none\";\n\ninterface BindingUpdateEvidence extends CallbackSourceEvidence {\n mirrorConfidence: MirrorConfidence;\n}\n\nfunction propertyChangedSignalProperty(text: string): string | null {\n return (\n text.match(/GetPropertyChangedSignal\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/)?.[1] ??\n null\n );\n}\n\nfunction reactChangePropertyForCallback(node: SyntaxNode): string | null {\n let current: SyntaxNode | null = node.parent;\n\n while (\n current &&\n current.type !== \"function_definition\" &&\n current.type !== \"function_declaration\"\n ) {\n if (current.type === \"field\") {\n return (\n current.text.match(\n /React\\s*\\.\\s*Change\\s*\\.\\s*([A-Za-z_][A-Za-z0-9_]*)/,\n )?.[1] ?? null\n );\n }\n\n current = current.parent;\n }\n\n return null;\n}\n\nfunction evidenceForExternalSource(\n highFrequency: boolean,\n hostFeedbackProperty?: string | null,\n): CallbackSourceEvidence {\n const hostFeedbackProperties = new Set<string>();\n\n if (hostFeedbackProperty) hostFeedbackProperties.add(hostFeedbackProperty);\n\n return {\n highFrequency,\n external: true,\n hostFeedbackProperties,\n genericExternal: !highFrequency && !hostFeedbackProperty,\n };\n}\n\nfunction mergeSourceEvidence(\n target: CallbackSourceEvidence,\n source: CallbackSourceEvidence,\n): void {\n target.highFrequency ||= source.highFrequency;\n target.external ||= source.external;\n target.genericExternal ||= source.genericExternal;\n\n for (const property of source.hostFeedbackProperties)\n target.hostFeedbackProperties.add(property);\n}\n\nfunction callbackSource(\n call: SyntaxNode,\n context: RuleContext,\n): CallbackSourceEvidence | null {\n const normalized = (context.getCallPath(call) ?? \"\").replace(/\\s+/g, \"\");\n\n const highFrequency =\n isHighFrequencyRobloxCall(call, context) ||\n LIKELY_CONTINUOUS_CALLBACK.test(normalized);\n\n const hostFeedbackProperty = propertyChangedSignalProperty(call.text);\n const final = normalized.split(/[.:]/).at(-1) ?? normalized;\n\n const external =\n highFrequency ||\n Boolean(hostFeedbackProperty) ||\n EXTERNAL_CALLBACK.test(normalized) ||\n EXTERNAL_CALLBACK.test(final);\n\n if (!external) return null;\n\n return evidenceForExternalSource(highFrequency, hostFeedbackProperty);\n}\n\nfunction importedCallbackSource(\n call: SyntaxNode,\n callbackArgument: SyntaxNode,\n importedCallbacks: Map<string, ExternalCallbackFunctionSummary>,\n context: RuleContext,\n): CallbackSourceEvidence | null {\n const path = context.getCallPath(call) ?? \"\";\n const summary = importedCallbacks.get(path);\n\n if (!summary) return null;\n\n const args = context.callArguments(call);\n\n const callbackIndex = args.findIndex((arg) =>\n sameNode(arg, callbackArgument),\n );\n\n if (\n callbackIndex < 0 ||\n !summary.callbackParameterIndexes.includes(callbackIndex)\n )\n return null;\n\n const highFrequency =\n summary.highFrequency ||\n args.some((arg) => isHighFrequencyRobloxExpression(arg, context));\n\n const hostFeedbackProperty = args\n .map((arg) => propertyChangedSignalProperty(arg.text))\n .find((property): property is string => Boolean(property));\n\n return evidenceForExternalSource(highFrequency, hostFeedbackProperty);\n}\n\nfunction directCallbackSource(\n node: SyntaxNode,\n importedCallbacks: Map<string, ExternalCallbackFunctionSummary>,\n context: RuleContext,\n): CallbackSourceEvidence | null {\n const reactChangeProperty = reactChangePropertyForCallback(node);\n\n if (reactChangeProperty)\n return evidenceForExternalSource(false, reactChangeProperty);\n\n const parent = node.parent;\n\n if (parent?.type !== \"arguments\" || parent.parent?.type !== \"function_call\")\n return null;\n\n const call = parent.parent;\n\n const imported = importedCallbackSource(\n call,\n node,\n importedCallbacks,\n context,\n );\n\n if (imported) return imported;\n\n return callbackSource(call, context);\n}\n\nfunction namedFunctionCallbackSource(\n fn: FunctionInfo,\n owner: FunctionInfo,\n importedCallbacks: Map<string, ExternalCallbackFunctionSummary>,\n context: RuleContext,\n): CallbackSourceEvidence | null {\n if (!fn.name || !owner.body) return null;\n\n const result: CallbackSourceEvidence = {\n highFrequency: false,\n external: false,\n hostFeedbackProperties: new Set(),\n genericExternal: false,\n };\n\n for (const call of context.walk(owner.body)) {\n if (call.type !== \"function_call\") continue;\n\n const args = context.callArguments(call);\n\n const callbackArg = args.find(\n (arg) => arg.type === \"identifier\" && arg.text === fn.name,\n );\n\n if (!callbackArg) continue;\n\n const source =\n importedCallbackSource(call, callbackArg, importedCallbacks, context) ??\n callbackSource(call, context);\n\n if (!source) continue;\n\n mergeSourceEvidence(result, source);\n }\n\n return result.external ? result : null;\n}\n\nfunction setterCallbackSource(\n call: SyntaxNode,\n binding: StateBinding,\n importedCallbacks: Map<string, ExternalCallbackFunctionSummary>,\n context: RuleContext,\n): CallbackSourceEvidence | null {\n const owner = binding.owner;\n\n if (!owner) return null;\n\n const nearest = context.nearestFunction(call);\n\n if (!nearest || nearest === owner) return null;\n\n const direct = directCallbackSource(nearest.node, importedCallbacks, context);\n\n if (direct) return direct;\n\n return namedFunctionCallbackSource(\n nearest,\n owner,\n importedCallbacks,\n context,\n );\n}\n\nfunction mirrorConfidenceRank(confidence: MirrorConfidence): number {\n if (confidence === \"strong\") return 2;\n\n if (confidence === \"possible\") return 1;\n\n return 0;\n}\n\nfunction mergeMirrorConfidence(\n a: MirrorConfidence,\n b: MirrorConfidence,\n): MirrorConfidence {\n return mirrorConfidenceRank(b) > mirrorConfidenceRank(a) ? b : a;\n}\n\nfunction isLiteralStateTransition(node: SyntaxNode | undefined): boolean {\n if (!node) return true;\n\n const text = node.text.trim();\n\n return /^(?:true|false|nil|[-+]?\\d+(?:\\.\\d+)?|[\"'][^\"']*[\"'])$/.test(text);\n}\n\nfunction isSemanticSnapshotExpression(node: SyntaxNode | undefined): boolean {\n return Boolean(node && SEMANTIC_SNAPSHOT_EXPRESSION.test(node.text));\n}\n\nfunction expressionReferencesCallbackParameter(\n expression: SyntaxNode,\n callback: FunctionInfo,\n context: RuleContext,\n): boolean {\n if (callback.parameters.length === 0) return false;\n\n const parameters = new Set(callback.parameters);\n\n return [...context.walk(expression)].some(\n (node) => node.type === \"identifier\" && parameters.has(node.text),\n );\n}\n\nconst PURE_EXPRESSION_ROOTS = new Set([\n \"math\",\n \"string\",\n \"utf8\",\n \"bit32\",\n \"UDim\",\n \"UDim2\",\n \"Vector2\",\n \"Vector3\",\n \"Color3\",\n \"CFrame\",\n \"Rect\",\n \"NumberRange\",\n \"NumberSequence\",\n \"ColorSequence\",\n \"BrickColor\",\n \"Font\",\n \"Enum\",\n \"tostring\",\n \"tonumber\",\n \"type\",\n \"typeof\",\n]);\n\nfunction callbackLocalNamesBefore(\n callback: FunctionInfo,\n before: SyntaxNode,\n context: RuleContext,\n): Set<string> {\n const names = new Set<string>();\n\n if (!callback.body) return names;\n\n for (const node of context.walk(callback.body)) {\n if (node.startIndex >= before.startIndex) continue;\n\n if (\n context.nearestFunction(node) !== callback ||\n node.type !== \"variable_declaration\"\n )\n continue;\n\n for (const name of declarationNames(node)) names.add(name);\n }\n\n return names;\n}\n\nfunction expressionHasExternalInput(\n expression: SyntaxNode,\n callback: FunctionInfo,\n setterCall: SyntaxNode,\n context: RuleContext,\n): boolean {\n const callbackLocals = callbackLocalNamesBefore(\n callback,\n setterCall,\n context,\n );\n\n const callbackParameters = new Set(callback.parameters);\n\n for (const node of context.walk(expression)) {\n if (node.type !== \"identifier\" || isIdentifierPropertyName(node)) continue;\n\n const name = node.text;\n\n if (callbackParameters.has(name)) return true;\n\n if (callbackLocals.has(name)) continue;\n\n if (context.model.stateValues.has(name)) continue;\n\n if (PURE_EXPRESSION_ROOTS.has(name)) continue;\n\n return true;\n }\n\n return false;\n}\n\nfunction setterHasDistinctValuesInCallback(\n call: SyntaxNode,\n callback: FunctionInfo,\n context: RuleContext,\n): boolean {\n if (!callback.body) return false;\n\n const setterPath = context.getCallPath(call);\n const distinctValues = new Set<string>();\n\n for (const sibling of context.walk(callback.body)) {\n if (\n sibling.type !== \"function_call\" ||\n context.nearestFunction(sibling) !== callback\n )\n continue;\n\n if (context.getCallPath(sibling) !== setterPath) continue;\n\n const argument = context.callArguments(sibling)[0];\n\n if (argument) distinctValues.add(argument.text.trim());\n }\n\n return distinctValues.size > 1;\n}\n\nfunction setterCallMirrorConfidence(\n call: SyntaxNode,\n callback: FunctionInfo,\n source: CallbackSourceEvidence,\n context: RuleContext,\n): MirrorConfidence {\n const value = context.callArguments(call)[0];\n\n if (!value || value.type === \"function_definition\") return \"none\";\n\n if (isLiteralStateTransition(value)) {\n return source.highFrequency &&\n setterHasDistinctValuesInCallback(call, callback, context)\n ? \"strong\"\n : \"none\";\n }\n\n if (isSemanticSnapshotExpression(value)) return \"none\";\n\n if (expressionReferencesCallbackParameter(value, callback, context))\n return \"strong\";\n\n if (source.hostFeedbackProperties.size > 0) {\n const text = value.text;\n\n if (\n [...source.hostFeedbackProperties].some((property) =>\n new RegExp(\n `(?:\\\\.|[\"'])${property.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")}\\\\b`,\n ).test(text),\n )\n ) {\n return \"strong\";\n }\n }\n\n if (!expressionHasExternalInput(value, callback, call, context)) {\n return source.highFrequency &&\n setterHasDistinctValuesInCallback(call, callback, context)\n ? \"strong\"\n : \"none\";\n }\n\n // Some subscriptions do not provide the changing value as a callback\n // parameter (mouse.Move and many custom signals are common examples). A\n // non-semantic expression read inside a proven hot callback is still strong\n // mirror evidence; for an unknown-rate callback keep it as a candidate only.\n if (source.highFrequency) return \"strong\";\n\n return source.genericExternal ? \"possible\" : \"strong\";\n}\n\nfunction mergeBindingUpdateEvidence(\n target: BindingUpdateEvidence,\n source: CallbackSourceEvidence,\n mirrorConfidence: MirrorConfidence,\n): void {\n if (mirrorConfidence === \"none\") return;\n\n mergeSourceEvidence(target, source);\n\n target.mirrorConfidence = mergeMirrorConfidence(\n target.mirrorConfidence,\n mirrorConfidence,\n );\n}\n\nfunction bindingUpdateEvidence(\n binding: StateBinding,\n importedCallbacks: Map<string, ExternalCallbackFunctionSummary>,\n context: RuleContext,\n): BindingUpdateEvidence | null {\n const owner = binding.owner;\n\n if (!owner?.body) return null;\n\n const result: BindingUpdateEvidence = {\n highFrequency: false,\n external: false,\n hostFeedbackProperties: new Set(),\n genericExternal: false,\n mirrorConfidence: \"none\",\n };\n\n for (const node of context.walk(owner.body)) {\n if (node.type !== \"function_call\") continue;\n\n const path = context.getCallPath(node);\n\n if (path === binding.setterName) {\n const source = setterCallbackSource(\n node,\n binding,\n importedCallbacks,\n context,\n );\n\n const callback = context.nearestFunction(node);\n\n if (!source || !callback || callback === owner) continue;\n\n mergeBindingUpdateEvidence(\n result,\n source,\n setterCallMirrorConfidence(node, callback, source, context),\n );\n\n continue;\n }\n\n // Also catch the very common `signal:Connect(setValue)` shape, where the\n // setter itself is the subscription callback and therefore never appears\n // as a function_call node.\n const args = context.callArguments(node);\n\n const setterArg = args.find(\n (arg) => arg.type === \"identifier\" && arg.text === binding.setterName,\n );\n\n if (!setterArg) continue;\n\n const normalized = (context.getCallPath(node) ?? \"\").replace(/\\s+/g, \"\");\n\n const imported = importedCallbackSource(\n node,\n setterArg,\n importedCallbacks,\n context,\n );\n\n const source =\n imported ??\n (PERSISTENT_MIRROR_CALLBACK.test(normalized)\n ? callbackSource(node, context)\n : null);\n\n if (!source) continue;\n\n mergeBindingUpdateEvidence(result, source, \"strong\");\n }\n\n return result.external && result.mirrorConfidence !== \"none\" ? result : null;\n}\n\nfunction hasStrongHostFeedbackEvidence(\n source: CallbackSourceEvidence,\n): boolean {\n if (source.genericExternal || source.hostFeedbackProperties.size === 0)\n return false;\n\n return [...source.hostFeedbackProperties].every((property) =>\n isStrongHostFeedbackProperty(property),\n );\n}\n\nfunction hasLikelyContinuousPropertyEvidence(\n source: CallbackSourceEvidence,\n): boolean {\n if (source.hostFeedbackProperties.size === 0) return false;\n\n return [...source.hostFeedbackProperties].every((property) =>\n LIKELY_CONTINUOUS_PROPERTIES.has(property),\n );\n}\n\nfunction returnedHookValues(\n binding: StateBinding,\n context: RuleContext,\n): Array<{ exportName: string; node: SyntaxNode }> {\n const owner = binding.owner;\n\n if (!owner?.body || !owner.isHook) return [];\n\n const results: Array<{ exportName: string; node: SyntaxNode }> = [];\n\n for (const node of context.walk(owner.body)) {\n if (node.type !== \"return_statement\") continue;\n\n if (context.nearestFunction(node) !== owner) continue;\n\n for (const returned of node.namedChildren.flatMap((child) =>\n child.type === \"expression_list\" ? child.namedChildren : [child],\n )) {\n if (\n returned.type === \"identifier\" &&\n returned.text === binding.valueName\n ) {\n results.push({ exportName: binding.valueName, node: returned });\n } else if (returned.type === \"table_constructor\") {\n for (const field of returned.namedChildren.filter(\n (child) => child.type === \"field\",\n )) {\n const value = fieldValue(field);\n const name = fieldName(field);\n\n if (\n value?.type === \"identifier\" &&\n value.text === binding.valueName &&\n name\n ) {\n results.push({ exportName: name, node: value });\n }\n }\n }\n }\n }\n\n return results;\n}\n\nfunction hookCallSitesAreBindingCompatible(\n binding: StateBinding,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): boolean {\n const owner = binding.owner;\n\n if (!owner?.isHook || !owner.name) return false;\n\n const returned = returnedHookValues(binding, context);\n\n if (returned.length === 0) return false;\n\n let callSites = 0;\n\n for (const call of context.findCalls()) {\n const path = context.getCallPath(call);\n\n if (path !== owner.name) continue;\n\n const declaration = declarationForCall(call);\n\n if (!declaration) continue;\n\n const localName = declarationNames(declaration)[0] ?? null;\n\n const caller =\n context.containingComponent(call) ?? context.nearestFunction(call);\n\n if (!localName || !caller) continue;\n\n if (returned.length === 1 && returned[0].exportName === binding.valueName) {\n if (\n !stateReadsAreBindingCompatible(\n localName,\n caller,\n declaration,\n context,\n compatibleComponentProps,\n )\n )\n return false;\n\n callSites += 1;\n continue;\n }\n }\n\n return callSites > 0;\n}\n\nfunction selectorFieldName(\n call: SyntaxNode,\n context: RuleContext,\n): string | null {\n const selector = context.callArguments(call)[0];\n\n if (!selector || selector.type !== \"function_definition\") return null;\n\n const text = selector.text;\n\n return (\n text.match(\n /\\breturn\\s+[A-Za-z_][A-Za-z0-9_]*\\.([A-Za-z_][A-Za-z0-9_]*)\\b/,\n )?.[1] ??\n text.match(\n /\\breturn\\s+[A-Za-z_][A-Za-z0-9_]*\\[\\s*[\"']([^\"']+)[\"']\\s*\\]/,\n )?.[1] ??\n null\n );\n}\n\nfunction callDefinitelyUsesBindingMode(\n summary: BindingCandidateHookSummary,\n call: SyntaxNode,\n context: RuleContext,\n): boolean {\n const parameterIndex = summary.bindingModeParameterIndex;\n\n if (parameterIndex === undefined || summary.bindingWhenTruthy === undefined)\n return false;\n\n const argument = context.callArguments(call)[parameterIndex];\n const value = argument?.text.trim() ?? \"nil\";\n let truthy: boolean | null = null;\n\n if (value === \"true\") truthy = true;\n else if (value === \"false\" || value === \"nil\") truthy = false;\n\n if (truthy === null) return false;\n\n return truthy === summary.bindingWhenTruthy;\n}\n\ntype BindingRecommendation = \"warning\" | \"candidate\" | null;\n\nfunction hasExplicitBindingMode(summary: BindingCandidateHookSummary): boolean {\n return (\n summary.bindingModeParameterIndex !== undefined &&\n summary.bindingWhenTruthy !== undefined\n );\n}\n\ntype BindingUsageKind =\n \"compatible\" | \"custom-component\" | \"effect\" | \"structural\" | \"unknown\";\n\ninterface BindingUsageSummary {\n reads: number;\n compatible: number;\n customComponent: number;\n visualCustomComponent: number;\n effect: number;\n structural: number;\n unknown: number;\n}\n\nconst LIKELY_VISUAL_PROP =\n /(?:position|size|rotation|transparency|opacity|color|image|text|anchor|visible|enabled|layout|scale|offset|zindex|canvas|viewport|cframe|width|height|radius|stroke|padding|spacing|angle|alpha|progress)/i;\n\nfunction createElementPropUsage(\n node: SyntaxNode,\n context: RuleContext,\n): { component: string; property: string } | null {\n let current: SyntaxNode | null = node;\n\n while (current) {\n const parent: SyntaxNode | null = current.parent;\n\n if (!parent) return null;\n\n if (parent.type === \"field\") {\n const value = fieldValue(parent);\n\n if (!value || !sameNode(value, current)) return null;\n\n const property = fieldName(parent);\n const table = parent.parent;\n const args = table?.parent;\n const call = args?.parent;\n\n if (\n !property ||\n table?.type !== \"table_constructor\" ||\n args?.type !== \"arguments\" ||\n !call ||\n !isCreateElementCall(call, context)\n ) {\n return null;\n }\n\n if (!sameNode(context.callArguments(call)[1], table)) return null;\n\n const component = context.callArguments(call)[0]?.text.trim() ?? \"\";\n\n if (!component || /^(?:\"[^\"]+\"|'[^']+')$/.test(component)) return null;\n\n return { component, property };\n }\n\n if (\n parent.type === \"function_definition\" ||\n parent.type === \"function_declaration\"\n )\n return null;\n\n if (!isTransparentParent(parent, context)) return null;\n\n current = parent;\n }\n\n return null;\n}\n\nfunction isEffectUsage(node: SyntaxNode, context: RuleContext): boolean {\n const nearest = context.nearestFunction(node);\n\n if (nearest) {\n const parent = nearest.node.parent;\n\n if (\n parent?.type === \"arguments\" &&\n parent.parent?.type === \"function_call\"\n ) {\n const path = context.resolveCallPath(\n context.getCallPath(parent.parent) ?? \"\",\n );\n\n if (/^React\\.use(?:Effect|LayoutEffect)$/.test(path)) return true;\n }\n }\n\n let current: SyntaxNode | null = node;\n\n while (current) {\n const parent: SyntaxNode | null = current.parent;\n\n if (!parent) break;\n\n if (\n parent.type === \"arguments\" &&\n parent.parent?.type === \"function_call\"\n ) {\n const path = context.resolveCallPath(\n context.getCallPath(parent.parent) ?? \"\",\n );\n\n if (/^React\\.use(?:Effect|LayoutEffect)$/.test(path)) return true;\n }\n\n if (\n parent.type === \"function_definition\" ||\n parent.type === \"function_declaration\"\n )\n break;\n\n current = parent;\n }\n\n return false;\n}\n\nfunction isStructuralUsage(node: SyntaxNode, context: RuleContext): boolean {\n let current: SyntaxNode | null = node;\n\n while (current) {\n const parent: SyntaxNode | null = current.parent;\n\n if (!parent) return false;\n\n if (\n parent.type === \"if_statement\" ||\n parent.type === \"elseif_clause\" ||\n parent.type === \"while_statement\" ||\n parent.type === \"repeat_statement\" ||\n parent.type === \"for_statement\" ||\n parent.type === \"for_in_statement\" ||\n parent.type === \"return_statement\"\n )\n return true;\n\n if (\n parent.type === \"function_definition\" ||\n parent.type === \"function_declaration\"\n )\n return false;\n\n if (!isTransparentParent(parent, context)) return false;\n\n current = parent;\n }\n\n return false;\n}\n\nfunction classifyBindingUsage(\n node: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): BindingUsageKind {\n if (isTransparentUsage(node, context, compatibleComponentProps))\n return \"compatible\";\n\n if (createElementPropUsage(node, context)) return \"custom-component\";\n\n if (isEffectUsage(node, context)) return \"effect\";\n\n if (isStructuralUsage(node, context)) return \"structural\";\n\n return \"unknown\";\n}\n\nfunction bindingUsageSummary(\n valueName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n visited = new Set<string>(),\n): BindingUsageSummary {\n const summary: BindingUsageSummary = {\n reads: 0,\n compatible: 0,\n customComponent: 0,\n visualCustomComponent: 0,\n effect: 0,\n structural: 0,\n unknown: 0,\n };\n\n if (!owner.body) return summary;\n\n const visitKey = `${declaration.startIndex}:${valueName}`;\n\n if (visited.has(visitKey)) return summary;\n\n visited.add(visitKey);\n\n for (const node of context.walk(owner.body)) {\n if (!isReadNode(node, valueName, owner, declaration)) continue;\n\n if (!isTransparentUsage(node, context, compatibleComponentProps)) {\n const derivedDeclaration = derivedLocalDeclarationForRead(node, context);\n\n const derivedNames = derivedDeclaration\n ? declarationNames(derivedDeclaration)\n : [];\n\n if (derivedDeclaration && derivedNames.length === 1) {\n const derived = bindingUsageSummary(\n derivedNames[0],\n owner,\n derivedDeclaration,\n context,\n compatibleComponentProps,\n new Set(visited),\n );\n\n if (derived.reads > 0) {\n summary.reads += derived.reads;\n summary.compatible += derived.compatible;\n summary.customComponent += derived.customComponent;\n summary.visualCustomComponent += derived.visualCustomComponent;\n summary.effect += derived.effect;\n summary.structural += derived.structural;\n summary.unknown += derived.unknown;\n continue;\n }\n }\n\n const opaqueDeclaration = opaqueDerivedLocalDeclarationForRead(\n node,\n context,\n );\n\n const opaqueNames = opaqueDeclaration\n ? declarationNames(opaqueDeclaration)\n : [];\n\n if (opaqueDeclaration && opaqueNames.length === 1) {\n const derived = bindingUsageSummary(\n opaqueNames[0],\n owner,\n opaqueDeclaration,\n context,\n compatibleComponentProps,\n new Set(visited),\n );\n\n if (derived.reads > 0) {\n summary.reads += derived.reads + 1;\n summary.compatible += derived.compatible;\n summary.customComponent += derived.customComponent;\n summary.visualCustomComponent += derived.visualCustomComponent;\n summary.effect += derived.effect;\n summary.structural += derived.structural;\n summary.unknown += derived.unknown + 1;\n continue;\n }\n }\n }\n\n summary.reads += 1;\n const customComponentUsage = createElementPropUsage(node, context);\n const kind = classifyBindingUsage(node, context, compatibleComponentProps);\n\n if (kind === \"compatible\") summary.compatible += 1;\n else if (kind === \"custom-component\") {\n summary.customComponent += 1;\n\n if (\n customComponentUsage &&\n !compatibleComponentProps.has(customComponentUsage.component) &&\n LIKELY_VISUAL_PROP.test(customComponentUsage.property)\n ) {\n summary.visualCustomComponent += 1;\n }\n } else if (kind === \"effect\") summary.effect += 1;\n else if (kind === \"structural\") summary.structural += 1;\n else summary.unknown += 1;\n }\n\n return summary;\n}\n\nfunction hasCandidatePresentationEvidence(\n summary: BindingUsageSummary,\n): boolean {\n return summary.compatible > 0 || summary.visualCustomComponent > 0;\n}\n\nfunction isPresentationOnly(summary: BindingUsageSummary): boolean {\n return summary.reads > 0 && summary.compatible === summary.reads;\n}\n\nfunction stateBindingForSetter(\n setterName: string,\n context: RuleContext,\n): StateBinding | null {\n const valueName = context.model.stateSetters.get(setterName);\n\n if (!valueName) return null;\n\n return (\n context.model.stateBindings.find(\n (binding) =>\n binding.setterName === setterName && binding.valueName === valueName,\n ) ?? null\n );\n}\n\nfunction effectOnlyDerivesPresentation(\n valueName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): boolean {\n if (!owner.body) return false;\n\n let foundRelevantEffect = false;\n\n for (const call of context.walk(owner.body)) {\n if (\n call.type !== \"function_call\" ||\n context.nearestFunction(call) !== owner\n )\n continue;\n\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (path !== \"React.useEffect\" && path !== \"React.useLayoutEffect\")\n continue;\n\n const callbackNode = context.callArguments(call)[0];\n\n if (callbackNode?.type !== \"function_definition\") continue;\n\n const callback = context.model.functionByNode.get(callbackNode.id);\n\n if (!callback?.body) continue;\n\n const usesValue = [...context.walk(callback.body)].some(\n (node) =>\n context.nearestFunction(node) === callback &&\n isReadNode(node, valueName, owner, declaration),\n );\n\n if (!usesValue) continue;\n\n foundRelevantEffect = true;\n\n let presentationSetter = false;\n\n for (const nested of context.walk(callback.body)) {\n if (\n nested.type !== \"function_call\" ||\n context.nearestFunction(nested) !== callback\n )\n continue;\n\n if (isBindingMapSafeCall(nested, context)) continue;\n\n const nestedPath = context.resolveCallPath(\n context.getCallPath(nested) ?? \"\",\n );\n\n if (\n nestedPath === \"debug.profilebegin\" ||\n nestedPath === \"debug.profileend\"\n )\n continue;\n\n if (context.model.bindingSetters.has(nestedPath)) {\n presentationSetter = true;\n continue;\n }\n\n const target = stateBindingForSetter(nestedPath, context);\n\n if (\n target?.owner &&\n stateReadsAreBindingCompatible(\n target.valueName,\n target.owner,\n target.declaration,\n context,\n compatibleComponentProps,\n )\n ) {\n presentationSetter = true;\n continue;\n }\n\n // An effect that performs any other call is doing behavior Doctor cannot\n // safely reproduce with Binding:map/joinBindings. Keep normal React state.\n return false;\n }\n\n if (!presentationSetter) return false;\n }\n\n return foundRelevantEffect;\n}\n\nfunction importedHookRecommendation(\n summary: BindingCandidateHookSummary,\n call: SyntaxNode,\n localName: string,\n owner: FunctionInfo,\n declaration: SyntaxNode,\n context: RuleContext,\n compatibleComponentProps: Map<string, Set<string>>,\n): BindingRecommendation {\n if (\n !summary.external ||\n callDefinitelyUsesBindingMode(summary, call, context)\n )\n return null;\n\n const usage = bindingUsageSummary(\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n );\n\n if (usage.reads === 0) return null;\n\n const presentationOnly = isPresentationOnly(usage);\n const explicitBindingMode = hasExplicitBindingMode(summary);\n const observedProperty = observedPropertyForCall(summary, call, context);\n\n const strongHostFeedback =\n summary.sourceKind === \"instance-property\" &&\n isStrongHostFeedbackProperty(observedProperty);\n\n const likelyContinuousProperty =\n summary.sourceKind === \"instance-property\" &&\n Boolean(\n observedProperty && LIKELY_CONTINUOUS_PROPERTIES.has(observedProperty),\n );\n\n const mirrorsExternalValue = summary.mirrorConfidence !== \"none\";\n\n if (presentationOnly && (summary.highFrequency || likelyContinuousProperty))\n return \"warning\";\n\n if (presentationOnly && strongHostFeedback && explicitBindingMode)\n return \"warning\";\n\n if (\n presentationOnly &&\n (explicitBindingMode || strongHostFeedback || mirrorsExternalValue)\n )\n return \"candidate\";\n\n if (\n strongHostFeedback &&\n usage.effect > 0 &&\n effectOnlyDerivesPresentation(\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n )\n ) {\n return \"candidate\";\n }\n\n if (!hasCandidatePresentationEvidence(usage)) return null;\n\n if (summary.highFrequency || likelyContinuousProperty) return \"candidate\";\n\n if (strongHostFeedback && explicitBindingMode && usage.effect === 0)\n return \"candidate\";\n\n return null;\n}\n\nexport const preferBindingOverState: RuleDefinition = {\n id: \"react-luau/prefer-binding-over-state\",\n category: \"Performance\",\n severity: \"warning\",\n\n description:\n \"Prefer React.useBinding when proven external presentation streams do not need React reconciliation.\",\n\n guidance: {\n explanation:\n \"A Binding can update these values without rerendering the component, and every use of the value only needs that kind of update. React state is therefore doing extra reconciliation work here.\",\n\n caveat:\n \"Keep React state if changing the value must rebuild component structure rather than only update Roblox Instance properties or other Binding-aware consumers.\",\n },\n\n run(context) {\n const diagnostics = [];\n const seen = new Set<string>();\n\n const importedHooks = importedBindingCandidateHooks(context);\n const importedCallbacks = importedExternalCallbackFunctions(context);\n\n const compatibleComponentProps =\n importedBindingCompatibleComponentProps(context);\n\n for (const call of context.findCalls()) {\n const path = context.getCallPath(call) ?? \"\";\n const summary = importedHooks.get(path);\n\n if (!summary) continue;\n\n const declaration = declarationForCall(call);\n\n const localName = declaration\n ? (declarationNames(declaration)[0] ?? null)\n : null;\n\n const owner =\n context.containingComponent(call) ?? context.nearestFunction(call);\n\n if (!declaration || !localName || !owner) continue;\n\n if (\n importedHookRecommendation(\n summary,\n call,\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n ) !== \"warning\"\n )\n continue;\n\n const key = `imported:${call.startIndex}:${call.endIndex}:${localName}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n const hasBindingMode = hasExplicitBindingMode(summary);\n const observedProperty = observedPropertyForCall(summary, call, context);\n\n const hostFeedback =\n summary.sourceKind === \"instance-property\" &&\n isStrongHostFeedbackProperty(observedProperty);\n\n const likelyContinuousProperty =\n summary.sourceKind === \"instance-property\" &&\n Boolean(\n observedProperty &&\n LIKELY_CONTINUOUS_PROPERTIES.has(observedProperty),\n );\n\n const message = hostFeedback\n ? `${path} mirrors ${observedProperty} through React state even though every analyzed use is presentation-only, so the measurement rerenders this consumer without needing reconciliation.`\n : likelyContinuousProperty\n ? `${path} mirrors continuously mutable ${observedProperty} through React state, and ${localName} only feeds presentation updates that do not need reconciliation.`\n : `${path} returns state updated from a high-frequency source, and ${localName} only feeds presentation updates that do not need React reconciliation.`;\n\n const help = hasBindingMode\n ? `Use the hook's Binding-returning mode${summary.bindingModeParameterName ? ` by passing ${summary.bindingWhenTruthy ? \"true\" : \"false\"} for ${summary.bindingModeParameterName}` : \"\"}. Binding:map can keep pure visual derivations outside the render cycle.`\n : \"Prefer a Binding-returning hook API so continuous presentation updates can reach host properties without rerendering the consumer.\";\n\n diagnostics.push({\n node: callNameNode(call),\n message,\n help,\n\n fixPreview: hasBindingMode\n ? importedHookFixPreview(\n summary,\n call,\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n )\n : undefined,\n });\n }\n\n for (const binding of context.model.stateBindings) {\n const owner = binding.owner;\n\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\n\n const update = bindingUpdateEvidence(binding, importedCallbacks, context);\n\n if (!update) continue;\n\n const localCompatible = stateReadsAreBindingCompatible(\n binding.valueName,\n owner,\n binding.declaration,\n context,\n compatibleComponentProps,\n );\n\n const hookCompatible = owner.isHook\n ? hookCallSitesAreBindingCompatible(\n binding,\n context,\n compatibleComponentProps,\n )\n : false;\n\n const strongHostFeedback = hasStrongHostFeedbackEvidence(update);\n\n const likelyContinuousProperty =\n hasLikelyContinuousPropertyEvidence(update);\n\n const shouldWarn = owner.isHook\n ? hookCompatible && (update.highFrequency || likelyContinuousProperty)\n : localCompatible &&\n (update.highFrequency ||\n strongHostFeedback ||\n likelyContinuousProperty);\n\n if (!shouldWarn) continue;\n\n const key = `${binding.call.startIndex}:${binding.call.endIndex}:${binding.valueName}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n if (owner.isHook && hookCompatible) {\n const properties = likelyContinuousProperty\n ? [...update.hostFeedbackProperties].sort().join(\", \")\n : \"\";\n\n diagnostics.push({\n node: callNameNode(binding.call),\n\n message:\n likelyContinuousProperty && !update.highFrequency\n ? `Hook state ${binding.valueName} mirrors continuously mutable ${properties} and is only consumed by presentation properties at analyzed call sites.`\n : `Hook state ${binding.valueName} is updated from a high-frequency source and is only consumed by presentation properties at analyzed call sites.`,\n\n help: \"Consider returning a Binding, or adding a Binding-returning variant of this hook, so continuous presentation updates do not rerender every consumer.\",\n });\n } else if (strongHostFeedback && !update.highFrequency) {\n const properties = [...update.hostFeedbackProperties].sort().join(\", \");\n\n diagnostics.push({\n node: callNameNode(binding.call),\n message: `State ${binding.valueName} mirrors ${properties} and only feeds presentation updates, so React reconciliation is acting as an unnecessary host-property feedback step.`,\n help: \"Prefer React.useBinding for this host feedback path. Use Binding:map for pure visual derivations and keep React state only when a change needs to affect component structure or React effects.\",\n\n fixPreview: allReadsDirectlyBindingSubstitutable(\n binding.valueName,\n owner,\n binding.declaration,\n context,\n compatibleComponentProps,\n )\n ? useBindingFixPreview(binding.call)\n : undefined,\n });\n } else if (likelyContinuousProperty && !update.highFrequency) {\n const properties = [...update.hostFeedbackProperties].sort().join(\", \");\n\n diagnostics.push({\n node: callNameNode(binding.call),\n message: `State ${binding.valueName} mirrors continuously mutable ${properties} and only feeds presentation updates that do not need React reconciliation.`,\n help: \"Prefer React.useBinding so external visual property changes can reach presentation without routing every update through component state.\",\n\n fixPreview: allReadsDirectlyBindingSubstitutable(\n binding.valueName,\n owner,\n binding.declaration,\n context,\n compatibleComponentProps,\n )\n ? useBindingFixPreview(binding.call)\n : undefined,\n });\n } else {\n diagnostics.push({\n node: callNameNode(binding.call),\n message: `State ${binding.valueName} is updated from a high-frequency callback and only feeds presentation updates that do not need React reconciliation.`,\n help: \"Prefer React.useBinding so continuous visual updates can reach host properties without rerendering the component.\",\n\n fixPreview: allReadsDirectlyBindingSubstitutable(\n binding.valueName,\n owner,\n binding.declaration,\n context,\n compatibleComponentProps,\n )\n ? useBindingFixPreview(binding.call)\n : undefined,\n });\n }\n }\n\n return diagnostics;\n },\n};\n\nexport const preferBindingOverStateCandidate: RuleDefinition = {\n id: \"react-luau/prefer-binding-over-state-candidate\",\n category: \"Performance\",\n severity: \"suggestion\",\n\n description:\n \"Surface lower-confidence state-to-Binding opportunities that need developer review.\",\n\n guidance: {\n explanation:\n \"A Binding can update visual values without rerendering the component. Doctor found an external reactive mirror or presentation branch, but it cannot fully prove the source's update pressure, conversion safety, or that every consumer can leave React state.\",\n\n caveat:\n \"Keep React state when the external event represents semantic UI state, changes component structure, drives hook/effect behavior, or is infrequent enough that a Binding would only make the code harder to follow. Mixed cases can split visual Binding updates from the smaller value that truly needs reconciliation.\",\n },\n\n run(context) {\n const diagnostics = [];\n const seen = new Set<string>();\n const importedHooks = importedBindingCandidateHooks(context);\n const importedCallbacks = importedExternalCallbackFunctions(context);\n\n const compatibleComponentProps =\n importedBindingCompatibleComponentProps(context);\n\n for (const call of context.findCalls()) {\n const path = context.getCallPath(call) ?? \"\";\n const summary = importedHooks.get(path);\n\n if (!summary) continue;\n\n const declaration = declarationForCall(call);\n\n const localName = declaration\n ? (declarationNames(declaration)[0] ?? null)\n : null;\n\n const owner =\n context.containingComponent(call) ?? context.nearestFunction(call);\n\n if (!declaration || !localName || !owner) continue;\n\n if (\n importedHookRecommendation(\n summary,\n call,\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n ) !== \"candidate\"\n )\n continue;\n\n const usage = bindingUsageSummary(\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n );\n\n const presentationOnly = isPresentationOnly(usage);\n const observedProperty = observedPropertyForCall(summary, call, context);\n\n const strongHostFeedback =\n summary.sourceKind === \"instance-property\" &&\n isStrongHostFeedbackProperty(observedProperty);\n\n const hasBindingMode = hasExplicitBindingMode(summary);\n const mirrorsExternalValue = summary.mirrorConfidence !== \"none\";\n\n const visualEffectBridge =\n strongHostFeedback &&\n usage.effect > 0 &&\n effectOnlyDerivesPresentation(\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n );\n\n const key = `imported:${call.startIndex}:${call.endIndex}:${localName}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n let message: string;\n let help: string;\n\n if (presentationOnly && hasBindingMode) {\n message = `${path} has a Binding-returning mode and ${localName} is only used for presentation, but Doctor cannot prove the updates are frequent enough to make the Binding version clearly preferable.`;\n\n help =\n \"Consider the Binding mode when this value changes often enough that avoiding reconciliation matters. Ordinary React state may be clearer for infrequent semantic updates.\";\n } else if (presentationOnly && strongHostFeedback) {\n message = `${path} mirrors ${observedProperty} through React state only for presentation, but the hook does not expose a proven low-friction Binding mode.`;\n\n help =\n \"Consider a Binding-returning variant if this host feedback path is performance-sensitive. Keep state when the simpler API is more valuable than avoiding occasional rerenders.\";\n } else if (presentationOnly && mirrorsExternalValue) {\n message = `${path} mirrors an external reactive value through React state, and ${localName} is only used for presentation.`;\n\n help =\n \"Consider a Binding-returning hook API if this source changes often enough that rerendering is unnecessary. Doctor cannot prove the source's update pressure, so ordinary state may still be the clearer choice.\";\n } else if (visualEffectBridge) {\n message = `${path} mirrors ${observedProperty} through React state, and the dependent React effect only derives presentation state or Bindings from ${localName}.`;\n\n help = hasBindingMode\n ? \"Consider the hook's Binding mode and move the visual derivation into Binding:map/joinBindings so the measurement does not need an intermediate React rerender.\"\n : \"Consider a Binding-returning hook variant if this visual feedback path is performance-sensitive; the current effect appears to use React state only as an intermediate presentation step.\";\n } else {\n message = `${path} updates ${localName} through React state and some consumers are presentation-only, but other consumers may still require React reconciliation.`;\n\n help =\n \"Inspect whether the presentation branch can move to a Binding while structural or effect-driven consumers keep React state. Avoid replacing the value wholesale when React still needs to react to it.\";\n }\n\n diagnostics.push({\n node: callNameNode(call),\n message,\n help,\n\n fixPreview:\n presentationOnly && hasBindingMode\n ? importedHookFixPreview(\n summary,\n call,\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n )\n : undefined,\n });\n }\n\n for (const call of context.findCalls()) {\n const path = context.getCallPath(call) ?? \"\";\n const member = path.split(/[.:]/).at(-1) ?? path;\n\n const bindingAlternative =\n context.project.bindingApiAlternatives.get(member);\n\n if (!bindingAlternative) continue;\n\n const declaration = declarationForCall(call);\n\n const localName = declaration\n ? (declarationNames(declaration)[0] ?? null)\n : null;\n\n const owner =\n context.containingComponent(call) ?? context.nearestFunction(call);\n\n if (\n !declaration ||\n !localName ||\n !owner ||\n !hasAnyRead(localName, owner, declaration, context)\n )\n continue;\n\n const usage = bindingUsageSummary(\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n );\n\n const presentationOnly = isPresentationOnly(usage);\n\n // A sibling Binding API is not enough to justify suggesting a split for\n // ordinary semantic/store state. Without independent high-frequency\n // evidence, only surface this when every analyzed consumer can stay on\n // the presentation path.\n if (!presentationOnly) continue;\n\n const field = selectorFieldName(call, context);\n const key = `state-api:${call.startIndex}:${call.endIndex}:${localName}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n diagnostics.push({\n node: callNameNode(call),\n message: `${path} subscribes ${localName} through React state${field ? ` for ${field}` : \"\"}, while ${bindingAlternative} is also available and every analyzed consumer is presentation-only.`,\n help: `Consider ${bindingAlternative} when this value updates frequently enough that avoiding reconciliation matters; state remains reasonable for ordinary semantic store updates.`,\n\n fixPreview: allReadsDirectlyBindingSubstitutable(\n localName,\n owner,\n declaration,\n context,\n compatibleComponentProps,\n )\n ? callMemberFixPreview(call, bindingAlternative)\n : undefined,\n });\n }\n\n for (const binding of context.model.stateBindings) {\n const owner = binding.owner;\n\n if (!owner || (!owner.isComponent && !owner.isHook) || !owner.body)\n continue;\n\n const update = bindingUpdateEvidence(binding, importedCallbacks, context);\n\n if (!update) continue;\n\n const localCompatible = stateReadsAreBindingCompatible(\n binding.valueName,\n owner,\n binding.declaration,\n context,\n compatibleComponentProps,\n );\n\n const hookCompatible = owner.isHook\n ? hookCallSitesAreBindingCompatible(\n binding,\n context,\n compatibleComponentProps,\n )\n : false;\n\n const strongHostFeedback = hasStrongHostFeedbackEvidence(update);\n\n const likelyContinuousProperty =\n hasLikelyContinuousPropertyEvidence(update);\n\n const mirrorsExternalValue = update.mirrorConfidence !== \"none\";\n\n if (owner.isHook) {\n if (\n hookCompatible &&\n (update.highFrequency || likelyContinuousProperty)\n )\n continue;\n\n if (!(hookCompatible && (strongHostFeedback || mirrorsExternalValue)))\n continue;\n\n const key = `hook-state:${binding.call.startIndex}:${binding.call.endIndex}:${binding.valueName}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n const measurement = strongHostFeedback\n ? \"a presentation measurement\"\n : \"an external reactive value\";\n\n diagnostics.push({\n node: callNameNode(binding.call),\n message: `Hook state ${binding.valueName} mirrors ${measurement} and is only consumed by presentation properties at analyzed call sites, but converting it requires changing the hook API.`,\n help: \"Consider adding a Binding-returning variant when this reactive path updates often enough that avoiding reconciliation matters; keeping the state API is reasonable when ordinary React state is simpler.\",\n });\n\n continue;\n }\n\n const usage = bindingUsageSummary(\n binding.valueName,\n owner,\n binding.declaration,\n context,\n compatibleComponentProps,\n );\n\n if (!hasCandidatePresentationEvidence(usage)) continue;\n\n if (\n localCompatible &&\n (update.highFrequency || strongHostFeedback || likelyContinuousProperty)\n )\n continue;\n\n if (localCompatible && mirrorsExternalValue) {\n const key = `state:${binding.call.startIndex}:${binding.call.endIndex}:${binding.valueName}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n diagnostics.push({\n node: callNameNode(binding.call),\n message: `State ${binding.valueName} mirrors an external reactive value and only feeds presentation updates, but Doctor cannot prove the source changes frequently enough for Binding to be clearly preferable.`,\n help: \"Consider React.useBinding when this source is a stream of presentation values rather than semantic React state. Keep useState when the external event represents an infrequent UI state transition.\",\n });\n\n continue;\n }\n\n const mixedHighFrequency =\n update.highFrequency || likelyContinuousProperty;\n\n const mixedHostFeedback =\n strongHostFeedback && usage.structural > 0 && usage.effect === 0;\n\n if (!mixedHighFrequency && !mixedHostFeedback) continue;\n\n const key = `state:${binding.call.startIndex}:${binding.call.endIndex}:${binding.valueName}`;\n\n if (seen.has(key)) continue;\n\n seen.add(key);\n\n diagnostics.push({\n node: callNameNode(binding.call),\n message: `State ${binding.valueName} has presentation-oriented consumers, but other uses still appear to need React reconciliation.`,\n help: \"Inspect whether the presentation branch can move to React.useBinding while structural consumers keep a smaller semantic state value. Splitting the responsibilities can remove hot-path rerenders without forcing Binding semantics onto the whole value.\",\n });\n }\n\n return diagnostics;\n },\n};\n",
34
36
  "import type { RuleDefinition } from \"../types\";\r\nimport { callNameNode } from \"./helpers\";\r\n\r\nexport const noCreateRootInRender: RuleDefinition = {\r\n id: \"react-luau/no-create-root-in-render\",\r\n category: \"Roblox\",\r\n severity: \"error\",\r\n description: \"Do not create ReactRoblox roots during component render.\",\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n if (path !== \"ReactRoblox.createRoot\") continue;\r\n const owner = context.containingComponent(call);\r\n if (!owner || !context.isDirectlyExecutedInFunction(call, owner)) continue;\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n message: \"ReactRoblox.createRoot() is called during component render.\",\r\n help: \"Own top-level roots outside component render. When a component intentionally creates a separate root, create it in an effect and unmount that exact root in cleanup.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
35
37
  "import type { SyntaxNode } from \"../syntax\";\r\nimport type { DiagnosticInput, FunctionInfo, RuleContext, RuleDefinition } from \"../types\";\r\nimport { normalizeExpressionText, sameNode } from \"../ast/walk\";\r\nimport { assignmentLeft, assignmentTargetNode, declarationNames, isBindingShadowedBetween } from \"./helpers\";\r\n\r\nfunction refRootFromTarget(target: string, refs: Set<string>): string | null {\r\n const match = target.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)\\s*\\.\\s*current\\b/);\r\n if (!match || !refs.has(match[1])) return null;\r\n return match[1];\r\n}\r\n\r\nfunction isNilGuardedLazyInit(node: SyntaxNode, refName: string): boolean {\r\n let current = node.parent;\r\n while (current) {\r\n if (current.type === \"if_statement\") {\r\n const condition = current.childForFieldName(\"condition\")?.text.replace(/\\s+/g, \"\") ?? \"\";\r\n const escaped = refName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n if (new RegExp(`^(?:${escaped}\\.current==nil|nil==${escaped}\\.current)$`).test(condition)) return true;\r\n return false;\r\n }\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return false;\r\n current = current.parent;\r\n }\r\n return false;\r\n}\r\n\r\nfunction assignmentRight(text: string): string | null {\r\n const match = text.match(/^(?:.*?)(?:\\+=|-=|\\*=|\\/=|%=|\\^=|\\.\\.=|=)\\s*(.+)$/s);\r\n return match?.[1]?.trim() ?? null;\r\n}\r\n\r\nfunction refDeclaration(owner: FunctionInfo, refName: string, context: RuleContext): SyntaxNode | null {\r\n if (!owner.body) return null;\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type !== \"variable_declaration\") continue;\r\n const names = declarationNames(statement);\r\n const index = names.indexOf(refName);\r\n if (index === -1) continue;\r\n const assignment = statement.namedChildren.find((child) => child.type === \"assignment_statement\");\r\n const expressions = assignment?.namedChildren.find((child) => child.type === \"expression_list\")?.namedChildren ?? [];\r\n const expression = expressions[index] ?? expressions[0];\r\n if (!expression || expression.type !== \"function_call\") continue;\r\n if (context.resolveCallPath(context.getCallPath(expression) ?? \"\") === \"React.useRef\") return statement;\r\n }\r\n return null;\r\n}\r\n\r\nfunction refInitializer(owner: FunctionInfo, refName: string, context: RuleContext): string | null {\r\n if (!owner.body) return null;\r\n for (const statement of owner.body.namedChildren) {\r\n if (statement.type !== \"variable_declaration\") continue;\r\n const names = declarationNames(statement);\r\n const index = names.indexOf(refName);\r\n if (index === -1) continue;\r\n const assignment = statement.namedChildren.find((child) => child.type === \"assignment_statement\");\r\n const expressions = assignment?.namedChildren.find((child) => child.type === \"expression_list\")?.namedChildren ?? [];\r\n const expression = expressions[index] ?? expressions[0];\r\n if (!expression || expression.type !== \"function_call\") return null;\r\n const path = context.resolveCallPath(context.getCallPath(expression) ?? \"\");\r\n if (path !== \"React.useRef\") return null;\r\n return context.callArguments(expression)[0]?.text.trim() ?? \"nil\";\r\n }\r\n return null;\r\n}\r\n\r\nfunction isTopLevelOwnerStatement(node: SyntaxNode, owner: FunctionInfo): boolean {\r\n let current = node.parent;\r\n while (current && !sameNode(current, owner.node)) {\r\n if (current.type === \"if_statement\" || current.type === \"for_statement\" || current.type === \"while_statement\" || current.type === \"repeat_statement\") {\r\n return false;\r\n }\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return false;\r\n current = current.parent;\r\n }\r\n return Boolean(current);\r\n}\r\n\r\n\r\nfunction exactRefCurrentTarget(node: SyntaxNode, refName: string): boolean {\r\n return normalizeExpressionText(assignmentLeft(node.text)) === `${refName}.current`;\r\n}\r\n\r\nfunction hasDirectRenderRead(owner: FunctionInfo, refName: string, context: RuleContext): boolean {\r\n if (!owner.body) return false;\r\n const target = `${refName}.current`;\r\n\r\n for (const candidate of context.walk(owner.body)) {\r\n if (candidate.type !== \"dot_index_expression\" || normalizeExpressionText(candidate.text) !== target) continue;\r\n if (!context.isDirectlyExecutedInFunction(candidate, owner)) continue;\r\n\r\n let current: SyntaxNode | null = candidate.parent;\r\n let isWrite = false;\r\n while (current && !sameNode(current, owner.node)) {\r\n if (current.type === \"assignment_statement\" || current.type === \"update_statement\") {\r\n isWrite = exactRefCurrentTarget(current, refName);\r\n break;\r\n }\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") break;\r\n current = current.parent;\r\n }\r\n if (!isWrite) return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isLatestValueMirror(node: SyntaxNode, owner: FunctionInfo, refName: string, context: RuleContext): boolean {\r\n if (node.type !== \"assignment_statement\" || !exactRefCurrentTarget(node, refName)) return false;\r\n const right = assignmentRight(node.text);\r\n if (!right) return false;\r\n\r\n const initializer = refInitializer(owner, refName, context);\r\n if (initializer !== null && normalizeExpressionText(right) === normalizeExpressionText(initializer)) return true;\r\n\r\n // A direct top-level `ref.current = renderValue` is the common use-latest\r\n // mirror pattern even when the ref used a neutral initial value such as false.\r\n // Nested writes remain warnings because they are usually imperative render work.\r\n if (isTopLevelOwnerStatement(node, owner)) {\r\n return /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/.test(normalizeExpressionText(right));\r\n }\r\n\r\n // A render-computed ref that is only written during render and read later by\r\n // effects/events is another use-latest mirror shape. The conditional/looped\r\n // write can still observe a pre-commit render, so keep it visible as a\r\n // suggestion rather than treating it as fully safe.\r\n return !hasDirectRenderRead(owner, refName, context);\r\n}\r\n\r\nexport const noRefCurrentInRender: RuleDefinition = {\r\n id: \"react-luau/no-ref-current-in-render\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n description: \"Avoid mutating ref.current during render except for predictable initialization or deliberate latest-value mirrors.\",\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const node of context.walk()) {\r\n if (node.type !== \"assignment_statement\" && node.type !== \"update_statement\") continue;\r\n const owner = context.nearestFunction(node);\r\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\r\n if (!context.isDirectlyExecutedInFunction(node, owner)) continue;\r\n const refs = context.model.refVariablesByFunction.get(owner.node.id) ?? new Set<string>();\r\n const target = assignmentLeft(node.text);\r\n const refName = refRootFromTarget(target, refs);\r\n if (!refName || isNilGuardedLazyInit(node, refName)) continue;\r\n const declaration = refDeclaration(owner, refName, context);\r\n if (isBindingShadowedBetween(node, owner, refName, declaration)) continue;\r\n\r\n const latestValueMirror = isLatestValueMirror(node, owner, refName, context);\r\n diagnostics.push({\r\n node: assignmentTargetNode(node),\r\n severity: latestValueMirror ? \"suggestion\" : \"warning\",\r\n message: latestValueMirror\r\n ? `${refName}.current mirrors its latest render value during render.`\r\n : `${refName}.current is mutated during ${owner.isHook ? \"hook\" : \"component\"} render.`,\r\n help: latestValueMirror\r\n ? \"A latest-value ref can expose an uncommitted render value to imperative callbacks. Update it after commit when that distinction matters.\"\r\n : \"Move ref writes into the event, effect, or ref callback that owns the mutation. A nil-guarded one-time lazy initialization pattern remains allowed for pure construction.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
36
38
  "import type { SyntaxNode } from \"../syntax\";\r\n\r\nimport type {\r\n RuleContext,\r\n RuleDefinition,\r\n SourceEffectModuleSummary,\r\n} from \"../types\";\r\n\r\nimport {\r\n normalizeRequireTarget,\r\n resolveModuleReference,\r\n} from \"../module-resolution\";\r\n\r\nimport { knownYieldReason } from \"../roblox-semantics\";\r\nimport { callNameNode } from \"./helpers\";\r\n\r\ninterface SourceBinding<T> {\r\n declaration: SyntaxNode;\r\n value: T | null;\r\n}\r\n\r\ntype SourceBindings<T> = Map<string, SourceBinding<T>[]>;\r\n\r\ninterface EffectInstance {\r\n summary: SourceEffectModuleSummary;\r\n persistent: boolean;\r\n}\r\n\r\nfunction declarationParts(node: SyntaxNode): {\r\n names: string[];\r\n expressions: SyntaxNode[];\r\n} {\r\n if (node.type !== \"variable_declaration\")\r\n return { names: [], expressions: [] };\r\n\r\n const assignment = node.namedChildren.find(\r\n (child) => child.type === \"assignment_statement\",\r\n );\r\n\r\n const variables =\r\n assignment?.namedChildren.find((child) => child.type === \"variable_list\") ??\r\n node.namedChildren.find((child) => child.type === \"variable_list\");\r\n\r\n const expressions = assignment?.namedChildren.find(\r\n (child) => child.type === \"expression_list\",\r\n );\r\n\r\n return {\r\n names:\r\n variables?.namedChildren\r\n .filter((child) => child.type === \"identifier\")\r\n .map((child) => child.text) ?? [],\r\n\r\n expressions: expressions?.namedChildren ?? [],\r\n };\r\n}\r\n\r\nfunction assignmentParts(node: SyntaxNode): {\r\n names: string[];\r\n expressions: SyntaxNode[];\r\n} {\r\n if (\r\n node.type !== \"assignment_statement\" ||\r\n node.parent?.type === \"variable_declaration\"\r\n )\r\n return { names: [], expressions: [] };\r\n\r\n const variables = node.namedChildren.find(\r\n (child) => child.type === \"variable_list\",\r\n );\r\n\r\n const expressions = node.namedChildren.find(\r\n (child) => child.type === \"expression_list\",\r\n );\r\n\r\n return {\r\n names:\r\n variables?.namedChildren\r\n .filter((child) => child.type === \"identifier\")\r\n .map((child) => child.text) ?? [],\r\n\r\n expressions: expressions?.namedChildren ?? [],\r\n };\r\n}\r\n\r\nfunction bindingParts(node: SyntaxNode): {\r\n names: string[];\r\n expressions: SyntaxNode[];\r\n} {\r\n return node.type === \"variable_declaration\"\r\n ? declarationParts(node)\r\n : assignmentParts(node);\r\n}\r\n\r\nfunction addSourceBinding<T>(\r\n bindings: SourceBindings<T>,\r\n name: string,\r\n declaration: SyntaxNode,\r\n value: T | null,\r\n): void {\r\n const existing = bindings.get(name) ?? [];\r\n existing.push({ declaration, value });\r\n bindings.set(name, existing);\r\n}\r\n\r\nfunction nearestScopeContainer(\r\n node: SyntaxNode,\r\n context: RuleContext,\r\n): SyntaxNode {\r\n const owner = context.nearestFunction(node);\r\n let current = node.parent;\r\n\r\n while (current) {\r\n if (current.type === \"block\") return current;\r\n\r\n if (owner && current.id === owner.node.id) return owner.body ?? owner.node;\r\n\r\n current = current.parent;\r\n }\r\n\r\n return context.root;\r\n}\r\n\r\nfunction declarationVisibleAt(\r\n declaration: SyntaxNode,\r\n node: SyntaxNode,\r\n context: RuleContext,\r\n): boolean {\r\n if (declaration.startIndex >= node.startIndex) return false;\r\n\r\n const container = nearestScopeContainer(declaration, context);\r\n\r\n return (\r\n node.startIndex >= container.startIndex &&\r\n node.endIndex <= container.endIndex\r\n );\r\n}\r\n\r\nfunction functionParameterNames(node: SyntaxNode): Set<string> {\r\n const result = new Set<string>();\r\n\r\n const parameters =\r\n node.childForFieldName(\"parameters\") ??\r\n node.namedChildren.find((child) => child.type === \"parameters\");\r\n\r\n for (const parameter of parameters?.namedChildren ?? []) {\r\n if (parameter.type === \"identifier\") result.add(parameter.text);\r\n\r\n for (const child of parameter.namedChildren) {\r\n if (child.type === \"identifier\") result.add(child.text);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction loopBindsName(node: SyntaxNode, name: string): boolean {\r\n if (node.type !== \"for_statement\") return false;\r\n\r\n const header = node.text.split(/\\bdo\\b/s, 1)[0] ?? \"\";\r\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\n return new RegExp(\r\n `^\\\\s*for\\\\s+(?:${escaped}\\\\s*=|[^\\\\n]*\\\\b${escaped}\\\\b[^\\\\n]*\\\\bin\\\\b)`,\r\n \"s\",\r\n ).test(header);\r\n}\r\n\r\nfunction bindingShadowedAfterDeclaration(\r\n declaration: SyntaxNode,\r\n node: SyntaxNode,\r\n name: string,\r\n): boolean {\r\n let current = node.parent;\r\n\r\n while (current) {\r\n // Once we reach a scope that already contains the source binding, binders\r\n // outside that scope cannot shadow the binding at this use site.\r\n if (\r\n declaration.startIndex >= current.startIndex &&\r\n declaration.endIndex <= current.endIndex\r\n )\r\n return false;\r\n\r\n if (\r\n (current.type === \"function_definition\" ||\r\n current.type === \"function_declaration\") &&\r\n functionParameterNames(current).has(name)\r\n )\r\n return true;\r\n\r\n if (loopBindsName(current, name)) return true;\r\n\r\n current = current.parent;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction resolveSourceBinding<T>(\r\n bindings: SourceBindings<T>,\r\n name: string,\r\n node: SyntaxNode,\r\n context: RuleContext,\r\n): T | null {\r\n const candidates = bindings.get(name);\r\n\r\n if (!candidates) return null;\r\n\r\n for (let index = candidates.length - 1; index >= 0; index -= 1) {\r\n const candidate = candidates[index];\r\n\r\n if (!declarationVisibleAt(candidate.declaration, node, context)) continue;\r\n\r\n if (bindingShadowedAfterDeclaration(candidate.declaration, node, name))\r\n return null;\r\n\r\n return candidate.value;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction sourceEffectImports(\r\n context: RuleContext,\r\n): SourceBindings<SourceEffectModuleSummary> {\r\n const result: SourceBindings<SourceEffectModuleSummary> = new Map();\r\n\r\n for (const node of context.walk(context.root)) {\r\n if (\r\n node.type !== \"variable_declaration\" &&\r\n node.type !== \"assignment_statement\"\r\n )\r\n continue;\r\n\r\n if (\r\n node.type === \"assignment_statement\" &&\r\n node.parent?.type === \"variable_declaration\"\r\n )\r\n continue;\r\n\r\n const { names, expressions } = bindingParts(node);\r\n\r\n for (let index = 0; index < names.length; index += 1) {\r\n const expression = expressions[index] ?? expressions[0];\r\n\r\n const requireMatch =\r\n expression?.type === \"function_call\"\r\n ? expression.text.match(/^\\s*require\\s*\\((.*?)\\)\\s*$/s)\r\n : null;\r\n\r\n const summary = requireMatch\r\n ? resolveModuleReference(\r\n normalizeRequireTarget(requireMatch[1]),\r\n context.project.sourceEffects,\r\n )\r\n : null;\r\n\r\n addSourceBinding(result, names[index], node, summary);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction factorySummaryFromCall(\r\n call: SyntaxNode,\r\n context: RuleContext,\r\n imports: SourceBindings<SourceEffectModuleSummary>,\r\n): SourceEffectModuleSummary | null {\r\n const path = context.getCallPath(call)?.replace(/\\s+/g, \"\") ?? \"\";\r\n\r\n const match = path.match(\r\n /^([A-Za-z_][A-Za-z0-9_]*)[.:]([A-Za-z_][A-Za-z0-9_]*)$/,\r\n );\r\n\r\n if (!match) return null;\r\n\r\n const summary = resolveSourceBinding(imports, match[1], call, context);\r\n\r\n if (!summary?.instanceFactories.has(match[2])) return null;\r\n\r\n return summary;\r\n}\r\n\r\nfunction returnedFactorySummary(\r\n callback: SyntaxNode,\r\n context: RuleContext,\r\n imports: SourceBindings<SourceEffectModuleSummary>,\r\n): SourceEffectModuleSummary | null {\r\n for (const node of context.walk(callback)) {\r\n if (\r\n node !== callback &&\r\n (node.type === \"function_definition\" ||\r\n node.type === \"function_declaration\")\r\n )\r\n continue;\r\n\r\n if (node.type !== \"return_statement\") continue;\r\n\r\n const expressions = node.namedChildren.find(\r\n (child) => child.type === \"expression_list\",\r\n );\r\n\r\n const value = expressions?.namedChildren[0];\r\n\r\n if (value?.type === \"function_call\")\r\n return factorySummaryFromCall(value, context, imports);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction sourceEffectInstances(\r\n context: RuleContext,\r\n imports: SourceBindings<SourceEffectModuleSummary>,\r\n): SourceBindings<EffectInstance> {\r\n const result: SourceBindings<EffectInstance> = new Map();\r\n\r\n for (const node of context.walk(context.root)) {\r\n if (\r\n node.type !== \"variable_declaration\" &&\r\n node.type !== \"assignment_statement\"\r\n )\r\n continue;\r\n\r\n if (\r\n node.type === \"assignment_statement\" &&\r\n node.parent?.type === \"variable_declaration\"\r\n )\r\n continue;\r\n\r\n const { names, expressions } = bindingParts(node);\r\n\r\n for (let index = 0; index < names.length; index += 1) {\r\n const expression = expressions[index] ?? expressions[0];\r\n let instance: EffectInstance | null = null;\r\n\r\n if (expression?.type === \"function_call\") {\r\n const directFactory = factorySummaryFromCall(\r\n expression,\r\n context,\r\n imports,\r\n );\r\n\r\n if (directFactory) {\r\n // An instance created at module scope persists across renders. A fresh\r\n // factory result created inside render is local to that render and\r\n // receiver-only mutation is not externally observable by itself.\r\n instance = {\r\n summary: directFactory,\r\n persistent: context.nearestFunction(node) === null,\r\n };\r\n } else if (\r\n context.resolveCallPath(context.getCallPath(expression) ?? \"\") ===\r\n \"React.useMemo\"\r\n ) {\r\n const callback = context.callArguments(expression)[0];\r\n\r\n if (callback?.type === \"function_definition\") {\r\n const memoizedFactory = returnedFactorySummary(\r\n callback,\r\n context,\r\n imports,\r\n );\r\n\r\n if (memoizedFactory)\r\n instance = { summary: memoizedFactory, persistent: true };\r\n }\r\n }\r\n } else if (expression?.type === \"identifier\") {\r\n instance = resolveSourceBinding(\r\n result,\r\n expression.text,\r\n expression,\r\n context,\r\n );\r\n }\r\n\r\n addSourceBinding(result, names[index], node, instance);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction sourceInferredEffectCall(\r\n call: SyntaxNode,\r\n context: RuleContext,\r\n imports: SourceBindings<SourceEffectModuleSummary>,\r\n instances: SourceBindings<EffectInstance>,\r\n): boolean {\r\n const path = context.getCallPath(call)?.replace(/\\s+/g, \"\") ?? \"\";\r\n\r\n if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(path)) {\r\n const direct = resolveSourceBinding(imports, path, call, context);\r\n\r\n if (direct?.effectfulExport) return true;\r\n }\r\n\r\n const member = path.match(\r\n /^([A-Za-z_][A-Za-z0-9_]*)[.:]([A-Za-z_][A-Za-z0-9_]*)$/,\r\n );\r\n\r\n if (!member) return false;\r\n\r\n const instance = resolveSourceBinding(instances, member[1], call, context);\r\n\r\n if (instance) {\r\n if (instance.summary.effectfulMembers.has(member[2])) return true;\r\n\r\n return (\r\n instance.persistent && instance.summary.mutatingMembers.has(member[2])\r\n );\r\n }\r\n\r\n const imported = resolveSourceBinding(imports, member[1], call, context);\r\n\r\n if (!imported) return false;\r\n\r\n // The imported module table is itself persistent project state, so a method\r\n // that mutates its receiver is observable even if it has no other effects.\r\n return (\r\n imported.effectfulMembers.has(member[2]) ||\r\n imported.mutatingMembers.has(member[2])\r\n );\r\n}\r\n\r\nconst RENDER_EFFECT_PATTERNS = [\r\n /^Instance\\.new$/,\r\n /tween[^:]*:(?:Create|Play)$/i,\r\n /:Connect$/,\r\n /:BindAction$/,\r\n /:BindActionAtPriority$/,\r\n /:BindActivate$/,\r\n /BindToRenderStep$/,\r\n /BindToSimulation$/,\r\n /:Destroy$/,\r\n /:unmount$/,\r\n];\r\n\r\nfunction hasNestedKnownRenderSideEffect(\r\n call: SyntaxNode,\r\n context: RuleContext,\r\n): boolean {\r\n for (const node of context.walk(call)) {\r\n if (node.startIndex === call.startIndex && node.endIndex === call.endIndex)\r\n continue;\r\n\r\n if (node.type !== \"function_call\") continue;\r\n\r\n const path = context.resolveCallPath(context.getCallPath(node) ?? \"\");\r\n\r\n if (path === \"task.spawn\" || path === \"task.defer\" || path === \"task.delay\")\r\n return true;\r\n\r\n if (\r\n knownYieldReason(path, node, context) ||\r\n RENDER_EFFECT_PATTERNS.some((pattern) => pattern.test(path))\r\n )\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport const noYieldInRender: RuleDefinition = {\r\n id: \"react-luau/no-yield-in-render\",\r\n category: \"Correctness\",\r\n severity: \"error\",\r\n description: \"React render functions must not yield.\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const component = context.containingComponent(call);\r\n\r\n if (!component || !context.isDirectlyExecutedInFunction(call, component))\r\n continue;\r\n\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n const reason = knownYieldReason(path, call, context);\r\n\r\n if (!reason) continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n message: `${path} can yield during component render.`,\r\n help: `Move yielding work outside render, usually into an effect or an external data-loading boundary. The bundled Roblox yield metadata recognizes ${reason} as a yielding API.`,\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const noTaskSpawnInRender: RuleDefinition = {\r\n id: \"react-luau/no-task-spawn-in-render\",\r\n category: \"Correctness\",\r\n severity: \"error\",\r\n description: \"Do not schedule asynchronous work during render.\",\r\n\r\n guidance: {\r\n explanation:\r\n \"Work started during render can continue even if React abandons that render.\",\r\n\r\n help: \"Start the task from the event that requests it, or from an effect if it belongs to the mounted component. Cancel effect-owned work in cleanup.\",\r\n },\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const component = context.containingComponent(call);\r\n\r\n if (!component || !context.isDirectlyExecutedInFunction(call, component))\r\n continue;\r\n\r\n const path = context.getCallPath(call);\r\n\r\n if (\r\n path !== \"task.spawn\" &&\r\n path !== \"task.defer\" &&\r\n path !== \"task.delay\"\r\n )\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n message: `${path} schedules work during component render.`,\r\n summary: `${path} schedules work during render.`,\r\n help: \"Move the scheduled work into an effect or the event that actually owns the side effect.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const noSideEffectsInRender: RuleDefinition = {\r\n id: \"react-luau/no-side-effects-in-render\",\r\n category: \"Correctness\",\r\n severity: \"error\",\r\n\r\n description:\r\n \"Do not create Instances, start tweens, subscribe, or perform other externally observable side effects during component render.\",\r\n\r\n guidance: {\r\n help: \"Move this work to an event handler or an effect. Clean up resources started by an effect.\",\r\n },\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n const effectImports = sourceEffectImports(context);\r\n const effectInstances = sourceEffectInstances(context, effectImports);\r\n\r\n for (const call of context.findCalls()) {\r\n const component = context.containingComponent(call);\r\n\r\n if (!component || !context.isDirectlyExecutedInFunction(call, component))\r\n continue;\r\n\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n const knownPattern = RENDER_EFFECT_PATTERNS.some((pattern) =>\r\n pattern.test(path),\r\n );\r\n\r\n let inferredFromSource = sourceInferredEffectCall(\r\n call,\r\n context,\r\n effectImports,\r\n effectInstances,\r\n );\r\n\r\n // Report the inner operation rather than duplicating it on an inferred wrapper.\r\n if (inferredFromSource && hasNestedKnownRenderSideEffect(call, context))\r\n inferredFromSource = false;\r\n\r\n if (!knownPattern && !inferredFromSource) continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n\r\n message:\r\n inferredFromSource && !knownPattern\r\n ? `${path} runs during render, and code it calls eventually changes state outside the current render.`\r\n : `${path} performs a side effect directly during component render.`,\r\n\r\n summary: `${path} has side effects during render.`,\r\n\r\n explanation:\r\n inferredFromSource && !knownPattern\r\n ? \"Doctor is not judging this call by its name. It followed the code behind the call and found a mutation that can affect existing state outside this render. That means the call can change the app even if React later abandons this render.\"\r\n : `${path} performs work outside React's render calculation.`,\r\n\r\n help:\r\n inferredFromSource && !knownPattern\r\n ? \"Move this call into an effect, event handler, or another committed lifecycle boundary so an abandoned render cannot still change application state.\"\r\n : \"Move imperative work into an effect or event handler with explicit ownership and cleanup. Use React.createElement for React-owned Instances. Destroy imperative Instances, cancel tweens, and disconnect subscriptions when their owner is cleaned up.\",\r\n\r\n fixPreview:\r\n inferredFromSource && !knownPattern\r\n ? {\r\n kind: \"pattern\" as const,\r\n before: call.text,\r\n after: `local function handleChange()\\n\\t${call.text}\\nend`,\r\n note: \"Connect this handler to the event that causes the change. Use an effect instead when a prop or state change should trigger it.\",\r\n }\r\n : undefined,\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
37
- "import {\n moduleKeys,\n normalizeRequireTarget,\n resolveModuleReference,\n} from \"../module-resolution\";\n\nimport type { SyntaxNode } from \"../syntax\";\n\nimport type {\n ConditionalHookModeSummary,\n DiagnosticInput,\n FixPreview,\n FunctionInfo,\n RuleContext,\n RuleDefinition,\n} from \"../types\";\n\nimport { nodeKey } from \"../ast/walk\";\n\nimport {\n callNameNode,\n CONDITIONAL_TYPES,\n declarationNames,\n findAncestorBetween,\n isHookPath,\n isNestedInsideFunction,\n} from \"./helpers\";\n\ntype HookModeStability = \"stable\" | \"unknown\" | \"unstable\";\n\nfunction staticIterationImports(\n context: RuleContext,\n): Map<string, Set<string>> {\n const result = new Map<string, Set<string>>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\n\n const match = node.text.match(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\n );\n\n if (!match) continue;\n\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.staticIterationTables,\n );\n\n if (summary) result.set(match[1], summary);\n }\n\n return result;\n}\n\nfunction nonReactHookImports(context: RuleContext): Set<string> {\n const result = new Set<string>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\n\n const match = node.text.match(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\n );\n\n if (!match || !/^use[A-Z0-9_]/.test(match[1])) continue;\n\n const kind = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.reactHookModules,\n );\n\n if (kind === false) result.add(match[1]);\n }\n\n return result;\n}\n\nfunction conditionalHookModeImports(\n context: RuleContext,\n): Map<string, ConditionalHookModeSummary> {\n const result = new Map<string, ConditionalHookModeSummary>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\n\n const match = node.text.match(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\n );\n\n if (!match) continue;\n\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.conditionalHookModes,\n );\n\n if (summary) result.set(match[1], summary);\n }\n\n return result;\n}\n\nfunction currentConditionalHookMode(\n context: RuleContext,\n): ConditionalHookModeSummary | null {\n for (const key of moduleKeys(context.relativePath)) {\n const summary = context.project.conditionalHookModes.get(key);\n\n if (summary) return summary;\n }\n\n return null;\n}\n\nfunction controlledParameterIndex(\n controlFlow: SyntaxNode,\n fn: FunctionInfo,\n summary: ConditionalHookModeSummary,\n): number | null {\n if (controlFlow.type !== \"if_statement\") return null;\n\n const header = (controlFlow.text.split(/\\bthen\\b/s, 1)[0] ?? \"\").trim();\n\n for (const [conditionName, index] of Object.entries(\n summary.conditionVariables,\n )) {\n const escaped = conditionName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n const patterns = [\n new RegExp(`^if\\\\s+${escaped}\\\\s*$`),\n new RegExp(`^if\\\\s+not\\\\s+${escaped}\\\\s*$`),\n new RegExp(`^if\\\\s+${escaped}\\\\s*(?:==|~=)\\\\s*(?:true|false|nil)\\\\s*$`),\n new RegExp(`^if\\\\s+(?:true|false|nil)\\\\s*(?:==|~=)\\\\s*${escaped}\\\\s*$`),\n ];\n\n if (patterns.some((pattern) => pattern.test(header))) return index;\n }\n\n // Keep a direct parameter fallback for older or externally constructed summaries.\n for (const index of summary.parameterIndexes) {\n const name = fn.parameters[index];\n\n if (!name) continue;\n\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n if (new RegExp(`^if\\\\s+(?:not\\\\s+)?${escaped}\\\\s*$`).test(header))\n return index;\n }\n\n return null;\n}\n\nfunction dynamicHookModeFixPreview(\n hookName: string,\n argumentText: string,\n): FixPreview {\n return {\n kind: \"pattern\",\n before: `local value = ${hookName}(${argumentText})`,\n after: `local value = ${hookName}(${argumentText}) -- keep the hook-topology mode stable for this instance`,\n note: \"A custom hook may choose different internal hooks only when the value controlling that choice stays stable for the lifetime of the component instance.\",\n };\n}\n\nfunction unwrapIteratorExpression(text: string): string {\n let current = text.trim();\n const wrapper = current.match(/^(?:pairs|ipairs)\\s*\\((.*)\\)$/s);\n\n if (wrapper) current = wrapper[1].trim();\n\n return current;\n}\n\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\n if (node.type !== \"variable_declaration\") return [];\n\n const assignment = node.namedChildren.find(\n (child) => child.type === \"assignment_statement\",\n );\n\n const expressionList = assignment?.namedChildren.find(\n (child) => child.type === \"expression_list\",\n );\n\n return expressionList?.namedChildren ?? [];\n}\n\nfunction isEmptyTable(node: SyntaxNode | undefined): boolean {\n return Boolean(\n node?.type === \"table_constructor\" &&\n node.namedChildren.every((child) => child.type !== \"field\"),\n );\n}\n\nfunction tableConstructorHasStableArity(node: SyntaxNode): boolean {\n if (node.type !== \"table_constructor\") return false;\n\n const fields = node.namedChildren.filter((child) => child.type === \"field\");\n\n if (fields.length === 0) return true;\n\n // Luau varargs, and a function call in the final list field, can contribute a\n // render-varying number of array entries. `{...}` is the real-world Jecs case\n // that motivated this distinction.\n if (\n fields.some((field) =>\n [...field.namedChildren].some(\n (child) => child.type === \"vararg_expression\",\n ),\n )\n )\n return false;\n\n const last = fields.at(-1);\n\n return !last?.namedChildren.some((child) => child.type === \"function_call\");\n}\n\nfunction stableShapeVariablesByFunction(\n context: RuleContext,\n): Map<number, Set<string>> {\n const stable = new Map<number, Set<string>>();\n const functionsByName = new Map<string, FunctionInfo>();\n\n for (const fn of context.model.functions) {\n stable.set(nodeKey(fn.node), new Set<string>());\n\n if (fn.name && /^[A-Za-z_][A-Za-z0-9_]*$/.test(fn.name))\n functionsByName.set(fn.name, fn);\n }\n\n const namesFor = (fn: FunctionInfo): Set<string> => {\n const key = nodeKey(fn.node);\n const names = stable.get(key) ?? new Set<string>();\n stable.set(key, names);\n\n return names;\n };\n\n // A table constructed in the function has a fixed literal shape. More importantly for\n // React code, an empty-dependency useMemo explicitly captures one value for the entire\n // component lifetime. If that captured value is later iterated to create hooks, the\n // iteration source itself does not change between renders unless user code mutates it.\n for (const declaration of context.walk(context.root)) {\n if (declaration.type !== \"variable_declaration\") continue;\n\n const owner = context.nearestFunction(declaration);\n\n if (!owner) continue;\n\n const names = declarationNames(declaration);\n const expressions = declarationExpressions(declaration);\n\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n\n if (!expression) continue;\n\n if (\n expression.type === \"table_constructor\" &&\n tableConstructorHasStableArity(expression)\n ) {\n namesFor(owner).add(names[index]);\n continue;\n }\n\n if (expression.type !== \"function_call\") continue;\n\n const rawPath = context.getCallPath(expression);\n\n if (!rawPath || context.resolveCallPath(rawPath) !== \"React.useMemo\")\n continue;\n\n const args = context.callArguments(expression);\n\n if (isEmptyTable(args[1])) namesFor(owner).add(names[index]);\n }\n }\n\n const callsByLocalFunction = new Map<string, SyntaxNode[]>();\n\n for (const call of context.findCalls()) {\n const rawPath = context.getCallPath(call);\n\n if (!rawPath || !functionsByName.has(rawPath)) continue;\n\n const calls = callsByLocalFunction.get(rawPath) ?? [];\n calls.push(call);\n callsByLocalFunction.set(rawPath, calls);\n }\n\n const expressionIsStableShape = (\n expression: SyntaxNode | undefined,\n owner: FunctionInfo | null,\n ): boolean => {\n if (!expression) return false;\n\n if (expression.type === \"table_constructor\")\n return tableConstructorHasStableArity(expression);\n\n const text = expression.text.trim();\n\n if (!owner || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(text)) return false;\n\n return namesFor(owner).has(text);\n };\n\n let changed = true;\n\n while (changed) {\n changed = false;\n\n // Preserve stable-shape aliases such as `local copy = capturedDefaults`.\n for (const declaration of context.walk(context.root)) {\n if (declaration.type !== \"variable_declaration\") continue;\n\n const owner = context.nearestFunction(declaration);\n\n if (!owner) continue;\n\n const names = declarationNames(declaration);\n const expressions = declarationExpressions(declaration);\n\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n\n if (!expressionIsStableShape(expression, owner)) continue;\n\n const target = names[index];\n const ownerNames = namesFor(owner);\n\n if (!ownerNames.has(target)) {\n ownerNames.add(target);\n changed = true;\n }\n }\n }\n\n // Propagate the guarantee through local helpers only when every known call to that\n // helper supplies a stable-shape argument for the parameter. This is what makes a\n // pattern such as `getStateContainer(capturedDefaults)` safe without exempting all\n // parameter-driven loops.\n for (const [name, fn] of functionsByName) {\n const calls = callsByLocalFunction.get(name) ?? [];\n\n if (calls.length === 0) continue;\n\n for (let index = 0; index < fn.parameters.length; index += 1) {\n const allStable = calls.every((call) => {\n const caller = context.nearestFunction(call);\n\n return expressionIsStableShape(\n context.callArguments(call)[index],\n caller,\n );\n });\n\n if (!allStable) continue;\n\n const parameter = fn.parameters[index];\n\n if (!parameter) continue;\n\n const fnNames = namesFor(fn);\n\n if (!fnNames.has(parameter)) {\n fnNames.add(parameter);\n changed = true;\n }\n }\n }\n }\n\n return stable;\n}\n\nfunction moduleInvariantVariables(context: RuleContext): Set<string> {\n const declarations = new Map<string, SyntaxNode>();\n const reassigned = new Set<string>();\n\n for (const node of context.walk(context.root)) {\n if (\n node.type === \"variable_declaration\" &&\n !context.nearestFunction(node)\n ) {\n for (const name of declarationNames(node)) declarations.set(name, node);\n\n continue;\n }\n\n if (\n node.type !== \"assignment_statement\" ||\n node.parent?.type === \"variable_declaration\"\n )\n continue;\n\n const variableList = node.namedChildren.find(\n (child) => child.type === \"variable_list\",\n );\n\n for (const target of variableList?.namedChildren ?? []) {\n if (target.type === \"identifier\") reassigned.add(target.text);\n }\n }\n\n return new Set(\n [...declarations.keys()].filter((name) => !reassigned.has(name)),\n );\n}\n\nfunction staticModuleTables(context: RuleContext): Set<string> {\n const candidates = new Set<string>();\n const declarations = new Set<string>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\" || context.nearestFunction(node))\n continue;\n\n const names = declarationNames(node);\n const expressions = declarationExpressions(node);\n names.forEach((name, index) => {\n if (declarations.has(name)) {\n candidates.delete(name);\n return;\n }\n declarations.add(name);\n const expression = expressions[index];\n if (expression && tableConstructorHasStableArity(expression))\n candidates.add(name);\n });\n }\n\n // Only accept private literals whose uses cannot mutate or leak the table.\n // Aliases, writes, unknown calls, and shadowing conservatively invalidate it.\n for (const node of context.walk(context.root)) {\n if (node.type !== \"identifier\" || !candidates.has(node.text)) continue;\n const parent = node.parent;\n if (\n parent?.type === \"variable_list\" &&\n parent.parent?.parent?.type === \"variable_declaration\" &&\n !context.nearestFunction(node)\n ) continue;\n if (parent?.type === \"unary_expression\" && parent.text.trim().startsWith(\"#\"))\n continue;\n if (\n parent?.type === \"expression_list\" &&\n parent.parent?.type === \"for_generic_clause\"\n ) continue;\n if (parent?.type === \"arguments\" && parent.namedChildren.length === 1) {\n const call = parent.parent;\n const path = call && context.getCallPath(call);\n if (path === \"pairs\" || path === \"ipairs\") continue;\n }\n candidates.delete(node.text);\n }\n\n return candidates;\n}\n\nfunction simpleConditionRoot(controlFlow: SyntaxNode): string | null {\n if (\n controlFlow.type !== \"if_statement\" &&\n controlFlow.type !== \"if_expression\"\n )\n return null;\n\n const condition = controlFlow.namedChildren[0];\n\n if (!condition) return null;\n\n const text = condition.text.trim();\n\n const match = text.match(\n /^(?:not\\s+)?([A-Za-z_][A-Za-z0-9_]*)(?:\\s*(?:==|~=)\\s*(?:true|false|nil))?$/,\n );\n\n return match?.[1] ?? null;\n}\n\nfunction conditionIsProvablyInvariant(\n controlFlow: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n moduleInvariants: Set<string>,\n): boolean {\n const condition = controlFlow.namedChildren[0];\n\n if (!condition) return false;\n\n if ([\"true\", \"false\", \"nil\", \"number\", \"string\"].includes(condition.type))\n return true;\n\n const root = simpleConditionRoot(controlFlow);\n\n if (!root) return false;\n\n if (moduleInvariants.has(root)) return true;\n\n return Boolean(\n context.model.stableVariablesByFunction.get(nodeKey(fn.node))?.has(root),\n );\n}\n\nfunction branchHookSequence(\n branch: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n): string[] | null {\n const hooks: string[] = [];\n\n for (const node of context.walk(branch)) {\n if (node.type !== \"function_call\") continue;\n\n if (context.nearestFunction(node) !== fn) continue;\n\n const rawPath = context.getCallPath(node);\n\n if (!rawPath) continue;\n\n const path = context.resolveCallPath(rawPath);\n\n if (!isHookPath(path)) continue;\n\n // Nested control flow inside a branch needs its own stability proof, so do\n // not call the outer branches equivalent merely because their flattened\n // hook names happen to match.\n const nestedControl = findAncestorBetween(node, branch, (ancestor) =>\n CONDITIONAL_TYPES.has(ancestor.type),\n );\n\n if (nestedControl) return null;\n\n hooks.push(path);\n }\n\n return hooks;\n}\n\nfunction ifBranchesHaveEquivalentBuiltInTopology(\n controlFlow: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n): boolean {\n if (controlFlow.type !== \"if_statement\") return false;\n\n const thenBlock = controlFlow.namedChildren.find(\n (child) => child.type === \"block\",\n );\n\n const elseStatement = controlFlow.namedChildren.find(\n (child) => child.type === \"else_statement\",\n );\n\n const elseBlock = elseStatement?.namedChildren.find(\n (child) => child.type === \"block\",\n );\n\n if (!thenBlock || !elseBlock) return false;\n\n const thenHooks = branchHookSequence(thenBlock, fn, context);\n const elseHooks = branchHookSequence(elseBlock, fn, context);\n\n if (!thenHooks || !elseHooks || thenHooks.length !== elseHooks.length)\n return false;\n\n if (!thenHooks.every((path, index) => path === elseHooks[index]))\n return false;\n\n // Built-in React hooks have topology that is independent of their arguments.\n // For custom hooks, identical call names can still select different internal\n // hooks based on different arguments, so keep those conservative.\n return thenHooks.every((path) => path.startsWith(\"React.\"));\n}\n\nfunction stateModeStability(\n name: string,\n owner: FunctionInfo,\n context: RuleContext,\n): HookModeStability | null {\n const binding = context.model.stateBindings.find(\n (candidate) => candidate.owner === owner && candidate.valueName === name,\n );\n\n if (!binding || !owner.body) return null;\n\n const initializerText = binding.initializer?.text.trim() ?? \"nil\";\n\n const stableLiteral =\n /^(?:true|false|nil|-?\\d+(?:\\.\\d+)?|\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')$/;\n\n let sawIndirectSetterReference = false;\n\n for (const node of context.walk(owner.body)) {\n if (\n node.type === \"function_call\" &&\n context.getCallPath(node) === binding.setterName\n ) {\n const argument = context.callArguments(node)[0];\n\n if (\n !argument ||\n !stableLiteral.test(initializerText) ||\n argument.text.trim() !== initializerText\n )\n return \"unstable\";\n\n continue;\n }\n\n if (node.type !== \"identifier\" || node.text !== binding.setterName)\n continue;\n\n if (\n node.startIndex >= binding.declaration.startIndex &&\n node.endIndex <= binding.declaration.endIndex\n )\n continue;\n\n if (node.parent?.type === \"function_call\") continue;\n\n sawIndirectSetterReference = true;\n }\n\n if (sawIndirectSetterReference) return \"unknown\";\n\n return \"stable\";\n}\n\nfunction localAliasExpression(\n name: string,\n owner: FunctionInfo,\n context: RuleContext,\n): SyntaxNode | null {\n if (!owner.body) return null;\n\n let result: SyntaxNode | null = null;\n\n for (const node of context.walk(owner.body)) {\n if (\n node.type !== \"variable_declaration\" ||\n context.nearestFunction(node) !== owner\n )\n continue;\n\n const names = declarationNames(node);\n const index = names.indexOf(name);\n\n if (index < 0) continue;\n\n const expressions = declarationExpressions(node);\n const expression = expressions[index] ?? expressions[0] ?? null;\n\n if (result) return null;\n\n result = expression;\n }\n\n return result;\n}\n\nfunction modeValueStability(\n node: SyntaxNode | undefined,\n owner: FunctionInfo,\n context: RuleContext,\n moduleInvariants: Set<string>,\n depth = 0,\n): HookModeStability {\n if (!node) return \"stable\";\n\n if (depth > 4) return \"unknown\";\n\n const text = node.text.trim();\n\n if ([\"true\", \"false\", \"nil\"].includes(text)) return \"stable\";\n\n if (\n [\"number\", \"string\", \"string_content\", \"function_definition\"].includes(\n node.type,\n )\n )\n return \"stable\";\n\n const root = text.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\n\n if (!root) return \"unknown\";\n\n const stateStability = stateModeStability(root, owner, context);\n\n if (stateStability) return stateStability;\n\n if (moduleInvariants.has(root)) return \"stable\";\n\n if (\n context.model.stableVariablesByFunction.get(nodeKey(owner.node))?.has(root)\n )\n return \"stable\";\n\n if (text === root) {\n const alias = localAliasExpression(root, owner, context);\n\n if (alias && alias.text.trim() !== root)\n return modeValueStability(\n alias,\n owner,\n context,\n moduleInvariants,\n depth + 1,\n );\n }\n\n return \"unknown\";\n}\n\nfunction tableFieldValue(\n table: SyntaxNode | undefined,\n accessPath: string,\n): SyntaxNode | undefined {\n if (!table || accessPath === \"\") return table;\n\n if (table.type !== \"table_constructor\") return undefined;\n\n let current: SyntaxNode | undefined = table;\n\n for (const part of accessPath.split(\".\")) {\n if (!current || current.type !== \"table_constructor\") return undefined;\n\n const field: SyntaxNode | undefined = current.namedChildren.find(\n (child) => {\n if (child.type !== \"field\") return false;\n\n return (\n child.namedChildren[0]?.type === \"identifier\" &&\n child.namedChildren[0]?.text === part\n );\n },\n );\n\n if (!field) return undefined;\n\n current = field.namedChildren[1];\n }\n\n return current;\n}\n\nfunction controlledAccessPaths(\n summary: ConditionalHookModeSummary,\n parameterIndex: number,\n): string[] {\n const paths = new Set<string>();\n\n for (const [conditionName, index] of Object.entries(\n summary.conditionVariables,\n )) {\n if (index !== parameterIndex) continue;\n\n paths.add(summary.conditionAccessPaths?.[conditionName] ?? \"\");\n }\n\n if (paths.size === 0) paths.add(\"\");\n\n return [...paths];\n}\n\nfunction loopIterationIsProvablyStable(\n loop: SyntaxNode,\n imports: Map<string, Set<string>>,\n owner: FunctionInfo,\n stableShapes: Map<number, Set<string>>,\n moduleTables: Set<string>,\n): boolean {\n const numeric = loop.namedChildren.find(\n (child) => child.type === \"for_numeric_clause\",\n );\n\n if (numeric) {\n const text = numeric.text;\n\n const bounds = text.match(\n /^\\s*[A-Za-z_][A-Za-z0-9_]*\\s*=\\s*([^,]+)\\s*,\\s*([^,]+)(?:\\s*,\\s*([^,]+))?\\s*$/s,\n );\n\n if (\n bounds &&\n bounds\n .slice(1)\n .filter(Boolean)\n .every((value) => /^-?\\d+(?:\\.\\d+)?$/.test(value!.trim()))\n )\n return true;\n }\n\n const clause = loop.namedChildren.find(\n (child) => child.type === \"for_generic_clause\",\n );\n\n const match = clause?.text.match(/\\bin\\s+(.+)$/s);\n\n if (!match) return false;\n\n const expression = unwrapIteratorExpression(match[1]);\n\n const path = expression.match(\n /^([A-Za-z_][A-Za-z0-9_]*)(?:\\.([A-Za-z_][A-Za-z0-9_.]*))?$/,\n );\n\n if (!path) return false;\n\n if (!path[2] && stableShapes.get(nodeKey(owner.node))?.has(path[1]))\n return true;\n\n if (!path[2] && moduleTables.has(path[1])) return true;\n\n const fields = imports.get(path[1]);\n\n if (!fields) return false;\n\n const propertyPath = path[2] ?? \"\";\n\n return fields.has(propertyPath);\n}\n\nfunction functionParameterTypes(fn: FunctionInfo): Map<string, string> {\n if (!fn.body) return new Map();\n\n const headerLength = Math.max(0, fn.body.startIndex - fn.node.startIndex);\n const header = fn.node.text.slice(0, headerLength);\n const result = new Map<string, string>();\n\n for (const match of header.matchAll(\n /\\b([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([^,\\n)]+)/g,\n )) {\n result.set(match[1], match[2].trim());\n }\n\n return result;\n}\n\nfunction isNonOptionalParameterType(typeText: string | undefined): boolean {\n if (!typeText) return false;\n\n return !typeText.includes(\"?\") && !/(?:^|[| ])nil(?:$|[| ])/i.test(typeText);\n}\n\nfunction impossibleNilGuardReturn(\n node: SyntaxNode,\n fn: FunctionInfo,\n parameterTypes: Map<string, string>,\n): boolean {\n let current = node.parent;\n\n while (current && current !== fn.node) {\n if (current.type === \"if_statement\") {\n const header = (current.text.split(/\\bthen\\b/s, 1)[0] ?? \"\").trim();\n\n const patterns = [\n /\\bif\\s+not\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*$/,\n /\\bif\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*==\\s*nil\\s*$/,\n /\\bif\\s+nil\\s*==\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*$/,\n ];\n\n for (const pattern of patterns) {\n const match = header.match(pattern);\n\n if (match && isNonOptionalParameterType(parameterTypes.get(match[1])))\n return true;\n }\n\n return false;\n }\n\n current = current.parent;\n }\n\n return false;\n}\n\nfunction reachableReturnsBefore(\n call: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n cache: Map<number, SyntaxNode[]>,\n): SyntaxNode[] {\n if (!fn.body) return [];\n\n const key = nodeKey(fn.node);\n let returns = cache.get(key);\n\n if (!returns) {\n const parameterTypes = functionParameterTypes(fn);\n\n returns = [...context.walk(fn.body)].filter(\n (node) =>\n node.type === \"return_statement\" &&\n !isNestedInsideFunction(node, fn.node) &&\n !impossibleNilGuardReturn(node, fn, parameterTypes),\n );\n\n cache.set(key, returns);\n }\n\n return returns.filter((node) => node.endIndex <= call.startIndex);\n}\n\nfunction returnIsControlledByStableTopologyMode(\n node: SyntaxNode,\n fn: FunctionInfo,\n summary: ConditionalHookModeSummary | null,\n context: RuleContext,\n moduleInvariants: Set<string>,\n): boolean {\n let current = node.parent;\n\n while (current && current !== fn.node) {\n if (current.type === \"if_statement\" || current.type === \"if_expression\") {\n if (summary && controlledParameterIndex(current, fn, summary) !== null)\n return true;\n\n if (conditionIsProvablyInvariant(current, fn, context, moduleInvariants))\n return true;\n\n return false;\n }\n\n current = current.parent;\n }\n\n return false;\n}\n\nfunction conditionalFixPreview(kind: string, hookName: string): FixPreview {\n if (hookName === \"React.useEffect\" && kind === \"if statement\") {\n return {\n kind: \"pattern\",\n before: `if enabled then\\n\\tReact.useEffect(function()\\n\\t\\tperformWork()\\n\\tend, {})\\nend`,\n after: `React.useEffect(function()\\n\\tif enabled then\\n\\t\\tperformWork()\\n\\tend\\nend, { enabled })`,\n note: \"Call the hook every render and put the condition inside its callback.\",\n };\n }\n\n if (kind === \"for statement\") {\n return {\n kind: \"pattern\",\n before: `for _, item in items do\\n\\tlocal value = ${hookName}(item)\\nend`,\n after: `local function Item(props)\\n\\tlocal value = ${hookName}(props.item)\\n\\treturn renderItem(value)\\nend\\n\\nfor _, item in items do\\n\\tchildren[item.id] = React.createElement(Item, {\\n\\t\\titem = item,\\n\\t})\\nend`,\n note: \"When collection size can change, move the hook into a child component so each component instance owns a fixed hook sequence.\",\n };\n }\n\n if (kind === \"while statement\" || kind === \"repeat statement\") {\n return {\n kind: \"pattern\",\n before: `while condition do\\n\\tlocal value = ${hookName}()\\nend`,\n after: `local value = ${hookName}()\\n\\nwhile condition do\\n\\t-- use value without creating another hook call\\nend`,\n note: \"Hook count must not depend on how many times a runtime loop executes.\",\n };\n }\n\n return {\n kind: \"pattern\",\n before: `if enabled then\\n\\tlocal value = ${hookName}()\\nend`,\n after: `local value = ${hookName}()\\n\\nif enabled then\\n\\t-- use value here\\nend`,\n note: \"Keep the hook call unconditional, then branch on its result.\",\n };\n}\n\nfunction earlyReturnFixPreview(hookName: string): FixPreview {\n return {\n kind: \"pattern\",\n before: `if not ready then\\n\\treturn nil\\nend\\n\\nlocal value = ${hookName}()`,\n after: `local value = ${hookName}()\\n\\nif not ready then\\n\\treturn nil\\nend`,\n note: \"Call hooks before any reachable early return so every render executes the same hook sequence.\",\n };\n}\n\nexport const rulesOfHooks: RuleDefinition = {\n id: \"react-luau/rules-of-hooks\",\n category: \"Hooks\",\n severity: \"error\",\n\n description:\n \"Hooks must run in the same order on every render of a React component or custom hook.\",\n\n guidance: {\n summary: \"Hook calls must stay in the same order between renders.\",\n help: \"Call hooks at the top level of a component or custom hook, before conditional returns.\",\n },\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n if (!context.model.isReactFile) return diagnostics;\n\n const staticImports = staticIterationImports(context);\n const stableShapes = stableShapeVariablesByFunction(context);\n const moduleTables = staticModuleTables(context);\n const moduleInvariants = moduleInvariantVariables(context);\n const modeImports = conditionalHookModeImports(context);\n const ignoredHookImports = nonReactHookImports(context);\n const currentModeSummary = currentConditionalHookMode(context);\n const reachableReturns = new Map<number, SyntaxNode[]>();\n\n for (const call of context.findCalls()) {\n const rawPath = context.getCallPath(call);\n\n if (!rawPath) continue;\n\n if (ignoredHookImports.has(rawPath)) continue;\n\n const path = context.resolveCallPath(rawPath);\n\n if (!isHookPath(path)) continue;\n\n const fn = context.nearestFunction(call);\n\n if (!fn || (!fn.isComponent && !fn.isHook)) {\n diagnostics.push({\n node: callNameNode(call),\n message: `Hook ${path} is called outside a React component or custom hook.`,\n help: \"Move the hook into a component or a custom hook whose name starts with use.\",\n\n fixPreview: {\n kind: \"pattern\",\n before: `local value = ${path}()\\n\\nlocal function helper()\\n\\treturn value\\nend`,\n after: `local function useHelper()\\n\\tlocal value = ${path}()\\n\\treturn value\\nend`,\n note: \"Hooks need a React-owned component or custom-hook call stack.\",\n },\n });\n\n continue;\n }\n\n const importedMode = modeImports.get(rawPath);\n\n if (importedMode) {\n const args = context.callArguments(call);\n\n const unstableControls = importedMode.parameterIndexes.flatMap(\n (index) =>\n controlledAccessPaths(importedMode, index)\n .map((accessPath) => {\n const argument = args[index];\n const value = tableFieldValue(argument, accessPath);\n\n const stability =\n accessPath !== \"\"\n ? argument?.type === \"table_constructor\"\n ? value\n ? modeValueStability(\n value,\n fn,\n context,\n moduleInvariants,\n )\n : \"stable\"\n : \"unknown\"\n : modeValueStability(\n argument,\n fn,\n context,\n moduleInvariants,\n );\n\n return { index, accessPath, argument, value, stability };\n })\n .filter((control) => control.stability === \"unstable\"),\n );\n\n if (unstableControls.length > 0) {\n const first = unstableControls[0];\n const firstIndex = first.index;\n const argument = first.argument;\n\n const parameterOffset =\n importedMode.parameterIndexes.indexOf(firstIndex);\n\n const baseParameterName =\n importedMode.parameterNames[parameterOffset] ??\n `argument ${firstIndex + 1}`;\n\n const parameterName = first.accessPath\n ? `${baseParameterName}.${first.accessPath}`\n : baseParameterName;\n\n const argumentText =\n first.value?.text.trim() || argument?.text.trim() || \"<omitted>\";\n\n diagnostics.push({\n node: first.value ?? argument ?? callNameNode(call),\n\n highlights: unstableControls\n .map((control) => control.value ?? control.argument)\n .filter((node): node is SyntaxNode => Boolean(node)),\n\n message: `Hook ${rawPath} receives hook-topology mode ${parameterName} from ${argumentText}, which is updated between renders and can make the custom hook execute a different hook sequence.`,\n help: `Keep ${parameterName} stable for this hook instance, or refactor ${rawPath} so it always calls the same hooks regardless of that mode.`,\n fixPreview: dynamicHookModeFixPreview(rawPath, argumentText),\n });\n }\n }\n\n const controlFlow = findAncestorBetween(call, fn.node, (node) =>\n CONDITIONAL_TYPES.has(node.type),\n );\n\n if (controlFlow) {\n if (\n currentModeSummary &&\n controlledParameterIndex(controlFlow, fn, currentModeSummary) !== null\n )\n continue;\n\n if (\n conditionIsProvablyInvariant(\n controlFlow,\n fn,\n context,\n moduleInvariants,\n )\n )\n continue;\n\n if (ifBranchesHaveEquivalentBuiltInTopology(controlFlow, fn, context))\n continue;\n\n if (\n controlFlow.type === \"for_statement\" &&\n loopIterationIsProvablyStable(\n controlFlow,\n staticImports,\n fn,\n stableShapes,\n moduleTables,\n )\n )\n continue;\n\n const kind = controlFlow.type.replaceAll(\"_\", \" \");\n\n const loopLike =\n controlFlow.type === \"for_statement\" ||\n controlFlow.type === \"while_statement\" ||\n controlFlow.type === \"repeat_statement\";\n\n diagnostics.push({\n node: callNameNode(call),\n\n message: loopLike\n ? `Hook ${path} is called inside ${kind} whose size or iteration order may change between renders. If that happens, React will see a different hook sequence.`\n : `Hook ${path} is called inside ${kind}, so the hook may be skipped on some renders.`,\n\n summary: loopLike\n ? `${path} may run a different number of times between renders.`\n : `${path} may be skipped on some renders.`,\n\n explanation: loopLike\n ? `This ${kind} may change how many times ${path} is called.`\n : `This ${kind} can skip ${path} on some renders.`,\n\n help: loopLike\n ? \"Keep hook count independent of runtime collection size or loop iterations. A common fix is to render a child component per item and call the hook inside that child.\"\n : \"Call the hook unconditionally at the top level, then branch on the returned value.\",\n\n fixPreview: conditionalFixPreview(kind, path),\n });\n\n continue;\n }\n\n const earlierReturns = reachableReturnsBefore(\n call,\n fn,\n context,\n reachableReturns,\n );\n\n if (\n earlierReturns.length > 0 &&\n !earlierReturns.every((node) =>\n returnIsControlledByStableTopologyMode(\n node,\n fn,\n currentModeSummary,\n context,\n moduleInvariants,\n ),\n )\n ) {\n diagnostics.push({\n node: callNameNode(call),\n message: `Hook ${path} may run after an earlier reachable return, so some renders can execute fewer hooks.`,\n help: \"Move the hook before reachable early returns so hook order cannot change between renders.\",\n fixPreview: earlyReturnFixPreview(path),\n });\n }\n }\n\n return diagnostics;\n },\n};\n",
39
+ "import {\n moduleKeys,\n normalizeRequireTarget,\n resolveModuleReference,\n} from \"../module-resolution\";\n\nimport type { SyntaxNode } from \"../syntax\";\n\nimport type {\n ConditionalHookModeSummary,\n DiagnosticInput,\n FixPreview,\n FunctionInfo,\n RuleContext,\n RuleDefinition,\n} from \"../types\";\n\nimport { nodeKey } from \"../ast/walk\";\nimport { reactApiPath, resolveLocalFunction, unwrapExpression } from \"../ast/local-values\";\n\nimport {\n callNameNode,\n CONDITIONAL_TYPES,\n declarationNames,\n findAncestorBetween,\n isBindingShadowedBetween,\n isHookPath,\n isNameShadowedBetween,\n isNestedInsideFunction,\n} from \"./helpers\";\n\ntype HookModeStability = \"stable\" | \"unknown\" | \"unstable\";\n\nfunction staticIterationImports(\n context: RuleContext,\n): Map<string, Set<string>> {\n const result = new Map<string, Set<string>>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\n\n const match = node.text.match(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\n );\n\n if (!match) continue;\n\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.staticIterationTables,\n );\n\n if (summary) result.set(match[1], summary);\n }\n\n return result;\n}\n\nfunction nonReactHookImports(context: RuleContext): Set<string> {\n const result = new Set<string>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\n\n const match = node.text.match(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\n );\n\n if (!match || !/^use[A-Z0-9_]/.test(match[1])) continue;\n\n const kind = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.reactHookModules,\n );\n\n if (kind === false) result.add(match[1]);\n }\n\n return result;\n}\n\nfunction conditionalHookModeImports(\n context: RuleContext,\n): Map<string, ConditionalHookModeSummary> {\n const result = new Map<string, ConditionalHookModeSummary>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\") continue;\n\n const match = node.text.match(\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\n );\n\n if (!match) continue;\n\n const summary = resolveModuleReference(\n normalizeRequireTarget(match[2]),\n context.project.conditionalHookModes,\n );\n\n if (summary) result.set(match[1], summary);\n }\n\n return result;\n}\n\nfunction currentConditionalHookMode(\n context: RuleContext,\n): ConditionalHookModeSummary | null {\n for (const key of moduleKeys(context.relativePath)) {\n const summary = context.project.conditionalHookModes.get(key);\n\n if (summary) return summary;\n }\n\n return null;\n}\n\nfunction controlledParameterIndex(\n controlFlow: SyntaxNode,\n fn: FunctionInfo,\n summary: ConditionalHookModeSummary,\n node: SyntaxNode,\n): number | null {\n if (controlFlow.type !== \"if_statement\") return null;\n\n const conditions = guardConditions(controlFlow, node);\n if (conditions.length === 0) return null;\n\n const variables = { ...summary.conditionVariables };\n // Keep a direct parameter fallback for older or externally constructed summaries\n for (const index of summary.parameterIndexes) {\n const name = fn.parameters[index];\n if (name) variables[name] ??= index;\n }\n\n const indexes = conditions.map((condition) => {\n for (const [name, index] of Object.entries(variables)) {\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const patterns = [\n new RegExp(`^(?:not\\\\s+)?${escaped}\\\\s*$`),\n new RegExp(`^${escaped}\\\\s*(?:==|~=)\\\\s*(?:true|false|nil)\\\\s*$`),\n new RegExp(`^(?:true|false|nil)\\\\s*(?:==|~=)\\\\s*${escaped}\\\\s*$`),\n ];\n if (patterns.some((pattern) => pattern.test(condition.text.trim())))\n return index;\n }\n return null;\n });\n\n return indexes.every((index) => index !== null) ? indexes[0] : null;\n}\n\nfunction dynamicHookModeFixPreview(\n hookName: string,\n argumentText: string,\n): FixPreview {\n return {\n kind: \"pattern\",\n before: `local value = ${hookName}(${argumentText})`,\n after: `local value = ${hookName}(${argumentText}) -- keep the hook-topology mode stable for this instance`,\n note: \"A custom hook may choose different internal hooks only when the value controlling that choice stays stable for the lifetime of the component instance.\",\n };\n}\n\nfunction unwrapIteratorExpression(text: string): string {\n let current = text.trim();\n const wrapper = current.match(/^(?:pairs|ipairs)\\s*\\((.*)\\)$/s);\n\n if (wrapper) current = wrapper[1].trim();\n\n return current;\n}\n\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\n if (node.type !== \"variable_declaration\") return [];\n\n const assignment = node.namedChildren.find(\n (child) => child.type === \"assignment_statement\",\n );\n\n const expressionList = assignment?.namedChildren.find(\n (child) => child.type === \"expression_list\",\n );\n\n return expressionList?.namedChildren ?? [];\n}\n\nfunction isEmptyTable(node: SyntaxNode | undefined): boolean {\n return Boolean(\n node?.type === \"table_constructor\" &&\n node.namedChildren.every((child) => child.type !== \"field\"),\n );\n}\n\nfunction tableConstructorHasStableArity(node: SyntaxNode): boolean {\n if (node.type !== \"table_constructor\") return false;\n\n const fields = node.namedChildren.filter((child) => child.type === \"field\");\n\n if (fields.length === 0) return true;\n\n // Luau varargs, and a function call in the final list field, can contribute a\n // render-varying number of array entries. `{...}` is the real-world Jecs case\n // that motivated this distinction.\n if (\n fields.some((field) =>\n [...field.namedChildren].some(\n (child) => child.type === \"vararg_expression\",\n ),\n )\n )\n return false;\n\n const last = fields.at(-1);\n\n return !last?.namedChildren.some((child) => child.type === \"function_call\");\n}\n\nfunction stableShapeVariablesByFunction(\n context: RuleContext,\n): Map<number, Set<string>> {\n const stable = new Map<number, Set<string>>();\n const functionsByName = new Map<string, FunctionInfo>();\n\n for (const fn of context.model.functions) {\n stable.set(nodeKey(fn.node), new Set<string>());\n\n if (fn.name && /^[A-Za-z_][A-Za-z0-9_]*$/.test(fn.name))\n functionsByName.set(fn.name, fn);\n }\n\n const namesFor = (fn: FunctionInfo): Set<string> => {\n const key = nodeKey(fn.node);\n const names = stable.get(key) ?? new Set<string>();\n stable.set(key, names);\n\n return names;\n };\n\n // A table constructed in the function has a fixed literal shape. More importantly for\n // React code, an empty-dependency useMemo explicitly captures one value for the entire\n // component lifetime. If that captured value is later iterated to create hooks, the\n // iteration source itself does not change between renders unless user code mutates it.\n for (const declaration of context.walk(context.root)) {\n if (declaration.type !== \"variable_declaration\") continue;\n\n const owner = context.nearestFunction(declaration);\n\n if (!owner) continue;\n\n const names = declarationNames(declaration);\n const expressions = declarationExpressions(declaration);\n\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n\n if (!expression) continue;\n\n if (\n expression.type === \"table_constructor\" &&\n tableConstructorHasStableArity(expression)\n ) {\n namesFor(owner).add(names[index]);\n continue;\n }\n\n if (expression.type !== \"function_call\") continue;\n\n const rawPath = context.getCallPath(expression);\n\n if (!rawPath || context.resolveCallPath(rawPath) !== \"React.useMemo\")\n continue;\n\n const args = context.callArguments(expression);\n\n if (isEmptyTable(args[1])) namesFor(owner).add(names[index]);\n }\n }\n\n const callsByLocalFunction = new Map<string, SyntaxNode[]>();\n\n for (const call of context.findCalls()) {\n const rawPath = context.getCallPath(call);\n\n if (!rawPath || !functionsByName.has(rawPath)) continue;\n\n const calls = callsByLocalFunction.get(rawPath) ?? [];\n calls.push(call);\n callsByLocalFunction.set(rawPath, calls);\n }\n\n const expressionIsStableShape = (\n expression: SyntaxNode | undefined,\n owner: FunctionInfo | null,\n ): boolean => {\n if (!expression) return false;\n\n if (expression.type === \"table_constructor\")\n return tableConstructorHasStableArity(expression);\n\n const text = expression.text.trim();\n\n if (!owner || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(text)) return false;\n\n return namesFor(owner).has(text);\n };\n\n let changed = true;\n\n while (changed) {\n changed = false;\n\n // Preserve stable-shape aliases such as `local copy = capturedDefaults`.\n for (const declaration of context.walk(context.root)) {\n if (declaration.type !== \"variable_declaration\") continue;\n\n const owner = context.nearestFunction(declaration);\n\n if (!owner) continue;\n\n const names = declarationNames(declaration);\n const expressions = declarationExpressions(declaration);\n\n for (let index = 0; index < names.length; index += 1) {\n const expression = expressions[index] ?? expressions[0];\n\n if (!expressionIsStableShape(expression, owner)) continue;\n\n const target = names[index];\n const ownerNames = namesFor(owner);\n\n if (!ownerNames.has(target)) {\n ownerNames.add(target);\n changed = true;\n }\n }\n }\n\n // Propagate the guarantee through local helpers only when every known call to that\n // helper supplies a stable-shape argument for the parameter. This is what makes a\n // pattern such as `getStateContainer(capturedDefaults)` safe without exempting all\n // parameter-driven loops.\n for (const [name, fn] of functionsByName) {\n const calls = callsByLocalFunction.get(name) ?? [];\n\n if (calls.length === 0) continue;\n\n for (let index = 0; index < fn.parameters.length; index += 1) {\n const allStable = calls.every((call) => {\n const caller = context.nearestFunction(call);\n\n return expressionIsStableShape(\n context.callArguments(call)[index],\n caller,\n );\n });\n\n if (!allStable) continue;\n\n const parameter = fn.parameters[index];\n\n if (!parameter) continue;\n\n const fnNames = namesFor(fn);\n\n if (!fnNames.has(parameter)) {\n fnNames.add(parameter);\n changed = true;\n }\n }\n }\n }\n\n return stable;\n}\n\nfunction moduleInvariantVariables(context: RuleContext): Set<string> {\n const declarations = new Map<string, SyntaxNode>();\n const reassigned = new Set<string>();\n\n for (const node of context.walk(context.root)) {\n if (\n node.type === \"variable_declaration\" &&\n !context.nearestFunction(node)\n ) {\n for (const name of declarationNames(node)) declarations.set(name, node);\n\n continue;\n }\n\n if (\n node.type !== \"assignment_statement\" ||\n node.parent?.type === \"variable_declaration\"\n )\n continue;\n\n const variableList = node.namedChildren.find(\n (child) => child.type === \"variable_list\",\n );\n\n for (const target of variableList?.namedChildren ?? []) {\n if (target.type === \"identifier\") reassigned.add(target.text);\n }\n }\n\n return new Set(\n [...declarations.keys()].filter((name) => !reassigned.has(name)),\n );\n}\n\nfunction staticModuleTables(context: RuleContext): Set<string> {\n const candidates = new Set<string>();\n const declarations = new Set<string>();\n\n for (const node of context.walk(context.root)) {\n if (node.type !== \"variable_declaration\" || context.nearestFunction(node))\n continue;\n\n const names = declarationNames(node);\n const expressions = declarationExpressions(node);\n names.forEach((name, index) => {\n if (declarations.has(name)) {\n candidates.delete(name);\n return;\n }\n declarations.add(name);\n const expression = expressions[index];\n if (expression && tableConstructorHasStableArity(expression))\n candidates.add(name);\n });\n }\n\n // Only accept private literals whose uses cannot mutate or leak the table.\n // Aliases, writes, unknown calls, and shadowing conservatively invalidate it.\n for (const node of context.walk(context.root)) {\n if (node.type !== \"identifier\" || !candidates.has(node.text)) continue;\n const parent = node.parent;\n if (\n parent?.type === \"variable_list\" &&\n parent.parent?.parent?.type === \"variable_declaration\" &&\n !context.nearestFunction(node)\n ) continue;\n if (parent?.type === \"unary_expression\" && parent.text.trim().startsWith(\"#\"))\n continue;\n if (\n parent?.type === \"expression_list\" &&\n parent.parent?.type === \"for_generic_clause\"\n ) continue;\n if (parent?.type === \"arguments\" && parent.namedChildren.length === 1) {\n const call = parent.parent;\n const path = call && context.getCallPath(call);\n if (path === \"pairs\" || path === \"ipairs\") continue;\n }\n candidates.delete(node.text);\n }\n\n return candidates;\n}\n\nfunction containsNode(container: SyntaxNode, node: SyntaxNode): boolean {\n return (\n node.startIndex >= container.startIndex &&\n node.endIndex <= container.endIndex\n );\n}\n\nfunction branchContaining(\n controlFlow: SyntaxNode,\n node: SyntaxNode,\n): SyntaxNode | null {\n return controlFlow.namedChildren.find((child) => containsNode(child, node)) ?? null;\n}\n\nfunction guardConditions(controlFlow: SyntaxNode, node: SyntaxNode): SyntaxNode[] {\n const condition = controlFlow.namedChildren[0];\n if (!condition) return [];\n\n if (controlFlow.type !== \"if_statement\" && controlFlow.type !== \"if_expression\")\n return [condition];\n\n if (containsNode(condition, node)) return [];\n\n const conditions = [condition];\n for (const clause of controlFlow.namedChildren.slice(1)) {\n if (clause.startIndex > node.startIndex) break;\n if (clause.type !== \"elseif_statement\" && clause.type !== \"elseif_clause\")\n continue;\n const clauseCondition = clause.namedChildren[0];\n if (clauseCondition && !containsNode(clauseCondition, node))\n conditions.push(clauseCondition);\n }\n return conditions;\n}\n\nfunction conditionallyContains(controlFlow: SyntaxNode, node: SyntaxNode): boolean {\n if (\n controlFlow.type === \"if_statement\" ||\n controlFlow.type === \"if_expression\"\n )\n return guardConditions(controlFlow, node).length > 0;\n\n if (controlFlow.type === \"for_statement\")\n return controlFlow.namedChildren.some(\n (child) => child.type === \"block\" && containsNode(child, node),\n );\n\n if (CONDITIONAL_TYPES.has(controlFlow.type)) return true;\n\n if (\n controlFlow.type !== \"binary_expression\" ||\n !controlFlow.children.some(\n (child) => child.type === \"and\" || child.type === \"or\",\n )\n )\n return false;\n\n const right =\n controlFlow.childForFieldName(\"right\") ?? controlFlow.namedChildren[1];\n\n return Boolean(right && containsNode(right, node));\n}\n\nfunction simpleConditionRoot(condition: SyntaxNode): string | null {\n const text = condition.text.trim();\n\n const match = text.match(\n /^(?:not\\s+)?([A-Za-z_][A-Za-z0-9_]*)(?:\\s*(?:==|~=)\\s*(?:true|false|nil))?$/,\n );\n\n return match?.[1] ?? null;\n}\n\nconst unstableLocalNamesCache = new WeakMap<FunctionInfo, Set<string>>();\n\nfunction unstableLocalNames(fn: FunctionInfo, context: RuleContext): Set<string> {\n const cached = unstableLocalNamesCache.get(fn);\n if (cached) return cached;\n\n // The model stores stability by name, so redeclarations and writes invalidate that proof\n const declared = new Set<string>();\n const unstable = new Set<string>();\n for (const node of context.walk(fn.node)) {\n if (\n node.type === \"variable_declaration\" &&\n context.nearestFunction(node) === fn\n ) {\n for (const name of declarationNames(node)) {\n if (declared.has(name)) unstable.add(name);\n declared.add(name);\n }\n }\n if (\n node.type !== \"assignment_statement\" ||\n node.parent?.type === \"variable_declaration\"\n )\n continue;\n const variables = node.namedChildren.find(\n (child) => child.type === \"variable_list\",\n );\n for (const target of variables?.namedChildren ?? []) {\n if (target.type === \"identifier\") unstable.add(target.text);\n }\n }\n unstableLocalNamesCache.set(fn, unstable);\n return unstable;\n}\n\nfunction moduleNameIsUnshadowed(\n name: string,\n node: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n): boolean {\n let owner: FunctionInfo | null = fn;\n while (owner) {\n if (\n owner.parameters.includes(name) ||\n isBindingShadowedBetween(node, owner, name)\n )\n return false;\n owner = context.nearestFunction(owner.node);\n }\n return true;\n}\n\nfunction conditionIsProvablyInvariant(\n controlFlow: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n moduleInvariants: Set<string>,\n node: SyntaxNode = controlFlow,\n): boolean {\n if (![\"if_statement\", \"if_expression\", \"binary_expression\"].includes(controlFlow.type))\n return false;\n\n const conditions = guardConditions(controlFlow, node);\n if (conditions.length === 0) return false;\n\n return conditions.every((condition) => {\n if ([\"true\", \"false\", \"nil\", \"number\", \"string\"].includes(condition.type))\n return true;\n\n const root = simpleConditionRoot(condition);\n\n if (!root) return false;\n\n if (moduleInvariants.has(root) && moduleNameIsUnshadowed(root, condition, fn, context))\n return true;\n\n if (isNameShadowedBetween(condition, fn, root)) return false;\n if (unstableLocalNames(fn, context).has(root)) return false;\n\n return Boolean(\n context.model.stableVariablesByFunction.get(nodeKey(fn.node))?.has(root),\n );\n });\n}\n\nfunction branchHookSequence(\n branch: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n): string[] | null {\n const hooks: string[] = [];\n\n for (const node of context.walk(branch)) {\n if (node.type !== \"function_call\") continue;\n\n if (context.nearestFunction(node) !== fn) continue;\n\n const rawPath = context.getCallPath(node);\n\n if (!rawPath) continue;\n\n const path = context.resolveCallPath(rawPath);\n\n if (!isHookPath(path)) continue;\n\n // Nested control flow inside a branch needs its own stability proof, so do\n // not call the outer branches equivalent merely because their flattened\n // hook names happen to match.\n const nestedControl = node.id === branch.id\n ? null\n : findAncestorBetween(node, branch, (ancestor) =>\n conditionallyContains(ancestor, node),\n );\n\n if (nestedControl || conditionallyContains(branch, node)) return null;\n\n hooks.push(path);\n }\n\n return hooks;\n}\n\nfunction ifBranchesHaveEquivalentBuiltInTopology(\n controlFlow: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n): boolean {\n const isStatement = controlFlow.type === \"if_statement\";\n if (!isStatement && controlFlow.type !== \"if_expression\")\n return false;\n\n const firstBranch = isStatement\n ? controlFlow.namedChildren.find((child) => child.type === \"block\")\n : controlFlow.namedChildren[1];\n const elseClause = controlFlow.namedChildren.find(\n (child) => child.type === \"else_statement\" || child.type === \"else_clause\",\n );\n const lastBranch = isStatement\n ? elseClause?.namedChildren.find((child) => child.type === \"block\")\n : elseClause?.namedChildren[0];\n if (!firstBranch || !lastBranch) return false;\n\n const branches = [firstBranch];\n for (const clause of controlFlow.namedChildren) {\n if (clause.type !== \"elseif_statement\" && clause.type !== \"elseif_clause\")\n continue;\n const condition = clause.namedChildren[0];\n if (!condition) return false;\n const conditionHooks = branchHookSequence(condition, fn, context);\n if (!conditionHooks || conditionHooks.length > 0) return false;\n const branch = isStatement\n ? clause.namedChildren.find((child) => child.type === \"block\")\n : clause.namedChildren[1];\n if (!branch) return false;\n branches.push(branch);\n }\n branches.push(lastBranch);\n\n const sequences = branches.map((branch) =>\n branchHookSequence(branch, fn, context),\n );\n const first = sequences[0];\n if (!first) return false;\n\n if (\n !sequences.every((sequence) =>\n sequence &&\n sequence.length === first.length &&\n sequence.every((path, index) => path === first[index]),\n )\n )\n return false;\n\n // Built-in React hooks have topology that is independent of their arguments.\n // For custom hooks, identical call names can still select different internal\n // hooks based on different arguments, so keep those conservative.\n return first.every((path) => path.startsWith(\"React.\"));\n}\n\nfunction stateModeStability(\n name: string,\n owner: FunctionInfo,\n context: RuleContext,\n): HookModeStability | null {\n const binding = context.model.stateBindings.find(\n (candidate) => candidate.owner === owner && candidate.valueName === name,\n );\n\n if (!binding || !owner.body) return null;\n\n const initializerText = binding.initializer?.text.trim() ?? \"nil\";\n\n const stableLiteral =\n /^(?:true|false|nil|-?\\d+(?:\\.\\d+)?|\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')$/;\n\n let sawIndirectSetterReference = false;\n\n for (const node of context.walk(owner.body)) {\n if (\n node.type === \"function_call\" &&\n context.getCallPath(node) === binding.setterName\n ) {\n const argument = context.callArguments(node)[0];\n\n if (\n !argument ||\n !stableLiteral.test(initializerText) ||\n argument.text.trim() !== initializerText\n )\n return \"unstable\";\n\n continue;\n }\n\n if (node.type !== \"identifier\" || node.text !== binding.setterName)\n continue;\n\n if (\n node.startIndex >= binding.declaration.startIndex &&\n node.endIndex <= binding.declaration.endIndex\n )\n continue;\n\n if (node.parent?.type === \"function_call\") continue;\n\n sawIndirectSetterReference = true;\n }\n\n if (sawIndirectSetterReference) return \"unknown\";\n\n return \"stable\";\n}\n\nfunction localAliasExpression(\n name: string,\n owner: FunctionInfo,\n context: RuleContext,\n): SyntaxNode | null {\n if (!owner.body) return null;\n\n let result: SyntaxNode | null = null;\n\n for (const node of context.walk(owner.body)) {\n if (\n node.type !== \"variable_declaration\" ||\n context.nearestFunction(node) !== owner\n )\n continue;\n\n const names = declarationNames(node);\n const index = names.indexOf(name);\n\n if (index < 0) continue;\n\n const expressions = declarationExpressions(node);\n const expression = expressions[index] ?? expressions[0] ?? null;\n\n if (result) return null;\n\n result = expression;\n }\n\n return result;\n}\n\nfunction modeValueStability(\n node: SyntaxNode | undefined,\n owner: FunctionInfo,\n context: RuleContext,\n moduleInvariants: Set<string>,\n depth = 0,\n): HookModeStability {\n if (!node) return \"stable\";\n\n if (depth > 4) return \"unknown\";\n\n const text = node.text.trim();\n\n if ([\"true\", \"false\", \"nil\"].includes(text)) return \"stable\";\n\n if (\n [\"number\", \"string\", \"string_content\", \"function_definition\"].includes(\n node.type,\n )\n )\n return \"stable\";\n\n const root = text.match(/^([A-Za-z_][A-Za-z0-9_]*)/)?.[1];\n\n if (!root) return \"unknown\";\n\n const stateStability = stateModeStability(root, owner, context);\n\n if (stateStability) return stateStability;\n\n if (moduleInvariants.has(root)) return \"stable\";\n\n if (\n context.model.stableVariablesByFunction.get(nodeKey(owner.node))?.has(root)\n )\n return \"stable\";\n\n if (text === root) {\n const alias = localAliasExpression(root, owner, context);\n\n if (alias && alias.text.trim() !== root)\n return modeValueStability(\n alias,\n owner,\n context,\n moduleInvariants,\n depth + 1,\n );\n }\n\n return \"unknown\";\n}\n\nfunction tableFieldValue(\n table: SyntaxNode | undefined,\n accessPath: string,\n): SyntaxNode | undefined {\n if (!table || accessPath === \"\") return table;\n\n if (table.type !== \"table_constructor\") return undefined;\n\n let current: SyntaxNode | undefined = table;\n\n for (const part of accessPath.split(\".\")) {\n if (!current || current.type !== \"table_constructor\") return undefined;\n\n const field: SyntaxNode | undefined = current.namedChildren.find(\n (child) => {\n if (child.type !== \"field\") return false;\n\n return (\n child.namedChildren[0]?.type === \"identifier\" &&\n child.namedChildren[0]?.text === part\n );\n },\n );\n\n if (!field) return undefined;\n\n current = field.namedChildren[1];\n }\n\n return current;\n}\n\nfunction controlledAccessPaths(\n summary: ConditionalHookModeSummary,\n parameterIndex: number,\n): string[] {\n const paths = new Set<string>();\n\n for (const [conditionName, index] of Object.entries(\n summary.conditionVariables,\n )) {\n if (index !== parameterIndex) continue;\n\n paths.add(summary.conditionAccessPaths?.[conditionName] ?? \"\");\n }\n\n if (paths.size === 0) paths.add(\"\");\n\n return [...paths];\n}\n\nfunction loopIterationIsProvablyStable(\n loop: SyntaxNode,\n imports: Map<string, Set<string>>,\n owner: FunctionInfo,\n stableShapes: Map<number, Set<string>>,\n moduleTables: Set<string>,\n context: RuleContext,\n moduleInvariants: Set<string>,\n): boolean {\n // A fixed collection does not fix hook count when iterations can exit or skip hooks\n for (const node of context.walk(loop)) {\n if (\n ![\"break_statement\", \"continue_statement\", \"return_statement\"].includes(\n node.type,\n )\n )\n continue;\n if (context.nearestFunction(node) !== owner) continue;\n\n if (node.type !== \"return_statement\") {\n const targetLoop = findAncestorBetween(node, owner.node, (ancestor) =>\n [\"for_statement\", \"while_statement\", \"repeat_statement\"].includes(ancestor.type),\n );\n if (targetLoop?.id !== loop.id) continue;\n }\n\n const dynamicGuard = findAncestorBetween(node, loop, (ancestor) =>\n conditionallyContains(ancestor, node) &&\n !conditionIsProvablyInvariant(ancestor, owner, context, moduleInvariants, node),\n );\n if (dynamicGuard) return false;\n }\n\n const numeric = loop.namedChildren.find(\n (child) => child.type === \"for_numeric_clause\",\n );\n\n if (numeric) {\n const text = numeric.text;\n\n const bounds = text.match(\n /^\\s*[A-Za-z_][A-Za-z0-9_]*\\s*=\\s*([^,]+)\\s*,\\s*([^,]+)(?:\\s*,\\s*([^,]+))?\\s*$/s,\n );\n\n if (\n bounds &&\n bounds\n .slice(1)\n .filter(Boolean)\n .every((value) => /^-?\\d+(?:\\.\\d+)?$/.test(value!.trim()))\n )\n return true;\n }\n\n const clause = loop.namedChildren.find(\n (child) => child.type === \"for_generic_clause\",\n );\n\n const match = clause?.text.match(/\\bin\\s+(.+)$/s);\n\n if (!match) return false;\n\n const expression = unwrapIteratorExpression(match[1]);\n\n const path = expression.match(\n /^([A-Za-z_][A-Za-z0-9_]*)(?:\\.([A-Za-z_][A-Za-z0-9_.]*))?$/,\n );\n\n if (!path) return false;\n\n if (!path[2] && stableShapes.get(nodeKey(owner.node))?.has(path[1]))\n return true;\n\n if (!path[2] && moduleTables.has(path[1])) return true;\n\n const fields = imports.get(path[1]);\n\n if (!fields) return false;\n\n const propertyPath = path[2] ?? \"\";\n\n return fields.has(propertyPath);\n}\n\nfunction functionParameterTypes(fn: FunctionInfo): Map<string, string> {\n if (!fn.body) return new Map();\n\n const headerLength = Math.max(0, fn.body.startIndex - fn.node.startIndex);\n const header = fn.node.text.slice(0, headerLength);\n const result = new Map<string, string>();\n\n for (const match of header.matchAll(\n /\\b([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([^,\\n)]+)/g,\n )) {\n result.set(match[1], match[2].trim());\n }\n\n return result;\n}\n\nfunction isNonOptionalParameterType(typeText: string | undefined): boolean {\n if (!typeText) return false;\n\n return !typeText.includes(\"?\") && !/(?:^|[| ])nil(?:$|[| ])/i.test(typeText);\n}\n\nfunction impossibleNilGuardReturn(\n node: SyntaxNode,\n fn: FunctionInfo,\n parameterTypes: Map<string, string>,\n): boolean {\n let current = node.parent;\n\n while (current && current !== fn.node) {\n if (current.type === \"if_statement\") {\n const header = (current.text.split(/\\bthen\\b/s, 1)[0] ?? \"\").trim();\n\n const patterns = [\n /\\bif\\s+not\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*$/,\n /\\bif\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*==\\s*nil\\s*$/,\n /\\bif\\s+nil\\s*==\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*$/,\n ];\n\n for (const pattern of patterns) {\n const match = header.match(pattern);\n\n if (match && isNonOptionalParameterType(parameterTypes.get(match[1])))\n return true;\n }\n\n return false;\n }\n\n current = current.parent;\n }\n\n return false;\n}\n\nfunction reachableReturnsBefore(\n call: SyntaxNode,\n fn: FunctionInfo,\n context: RuleContext,\n cache: Map<number, SyntaxNode[]>,\n): SyntaxNode[] {\n if (!fn.body) return [];\n\n const key = nodeKey(fn.node);\n let returns = cache.get(key);\n\n if (!returns) {\n const parameterTypes = functionParameterTypes(fn);\n\n returns = [...context.walk(fn.body)].filter(\n (node) =>\n node.type === \"return_statement\" &&\n !isNestedInsideFunction(node, fn.node) &&\n !impossibleNilGuardReturn(node, fn, parameterTypes),\n );\n\n cache.set(key, returns);\n }\n\n return returns.filter((node) => {\n if (node.endIndex > call.startIndex) return false;\n\n // Returns from sibling branches cannot precede this hook on the same execution path\n return !findAncestorBetween(node, fn.node, (ancestor) => {\n if (ancestor.type !== \"if_statement\") return false;\n const returnBranch = branchContaining(ancestor, node);\n const callBranch = branchContaining(ancestor, call);\n return Boolean(returnBranch && callBranch && returnBranch.id !== callBranch.id);\n });\n });\n}\n\nfunction returnIsControlledByStableTopologyMode(\n node: SyntaxNode,\n fn: FunctionInfo,\n summary: ConditionalHookModeSummary | null,\n context: RuleContext,\n moduleInvariants: Set<string>,\n): boolean {\n let current = node.parent;\n let sawStableGuard = false;\n\n while (current && current !== fn.node) {\n if ([\"for_statement\", \"while_statement\", \"repeat_statement\"].includes(current.type))\n return false;\n\n if (current.type === \"if_statement\" || current.type === \"if_expression\") {\n if (summary && controlledParameterIndex(current, fn, summary, node) !== null)\n sawStableGuard = true;\n else if (\n conditionIsProvablyInvariant(current, fn, context, moduleInvariants, node)\n )\n sawStableGuard = true;\n else return false;\n }\n\n current = current.parent;\n }\n\n return sawStableGuard;\n}\n\nfunction conditionalFixPreview(kind: string, hookName: string): FixPreview {\n if (kind === \"short-circuit expression\") {\n return {\n kind: \"pattern\",\n before: `local result = enabled and renderChild(${hookName}())`,\n after: `local value = ${hookName}()\\nlocal result = enabled and renderChild(value)`,\n note: \"Call the hook before the short-circuit expression, then branch on its result\",\n };\n }\n\n if (hookName === \"React.useEffect\" && kind === \"if statement\") {\n return {\n kind: \"pattern\",\n before: `if enabled then\\n\\tReact.useEffect(function()\\n\\t\\tperformWork()\\n\\tend, {})\\nend`,\n after: `React.useEffect(function()\\n\\tif enabled then\\n\\t\\tperformWork()\\n\\tend\\nend, { enabled })`,\n note: \"Call the hook every render and put the condition inside its callback.\",\n };\n }\n\n if (kind === \"for statement\") {\n return {\n kind: \"pattern\",\n before: `for _, item in items do\\n\\tlocal value = ${hookName}(item)\\nend`,\n after: `local function Item(props)\\n\\tlocal value = ${hookName}(props.item)\\n\\treturn renderItem(value)\\nend\\n\\nfor _, item in items do\\n\\tchildren[item.id] = React.createElement(Item, {\\n\\t\\titem = item,\\n\\t})\\nend`,\n note: \"When collection size can change, move the hook into a child component so each component instance owns a fixed hook sequence.\",\n };\n }\n\n if (kind === \"while statement\" || kind === \"repeat statement\") {\n return {\n kind: \"pattern\",\n before: `while condition do\\n\\tlocal value = ${hookName}()\\nend`,\n after: `local value = ${hookName}()\\n\\nwhile condition do\\n\\t-- use value without creating another hook call\\nend`,\n note: \"Hook count must not depend on how many times a runtime loop executes.\",\n };\n }\n\n return {\n kind: \"pattern\",\n before: `if enabled then\\n\\tlocal value = ${hookName}()\\nend`,\n after: `local value = ${hookName}()\\n\\nif enabled then\\n\\t-- use value here\\nend`,\n note: \"Keep the hook call unconditional, then branch on its result.\",\n };\n}\n\nfunction earlyReturnFixPreview(hookName: string): FixPreview {\n return {\n kind: \"pattern\",\n before: `if not ready then\\n\\treturn nil\\nend\\n\\nlocal value = ${hookName}()`,\n after: `local value = ${hookName}()\\n\\nif not ready then\\n\\treturn nil\\nend`,\n note: \"Call hooks before any reachable early return so every render executes the same hook sequence.\",\n };\n}\n\nfunction callbackFunctions(context: RuleContext): Set<number> {\n const callbacks = new Set<number>();\n const addCallback = (expression: SyntaxNode) => {\n const fn = resolveLocalFunction(context, expression);\n if (fn) callbacks.add(fn.node.id);\n };\n\n for (const call of context.findCalls()) {\n const path = reactApiPath(context, call);\n const args = context.callArguments(call);\n for (const [index, argument] of args.entries()) {\n if (\n index === 0 &&\n [\"React.memo\", \"React.forwardRef\", \"React.createElement\"].includes(\n path ?? \"\",\n )\n )\n continue;\n if (\n path?.startsWith(\"React.use\") ||\n path === \"React.memo\" ||\n unwrapExpression(argument).type === \"function_definition\"\n )\n addCallback(argument);\n }\n\n // Custom component props may carry component types rather than callbacks\n if (\n path !== \"React.createElement\" ||\n args[0]?.type !== \"string\" ||\n args[1]?.type !== \"table_constructor\"\n )\n continue;\n for (const field of args[1].namedChildren) {\n if (field.type !== \"field\") continue;\n const value = field.namedChildren.at(-1);\n if (value) addCallback(value);\n }\n }\n return callbacks;\n}\n\nexport const rulesOfHooks: RuleDefinition = {\n id: \"react-luau/rules-of-hooks\",\n category: \"Hooks\",\n severity: \"error\",\n\n description:\n \"Hooks must run in the same order on every render of a React component or custom hook.\",\n\n guidance: {\n summary: \"Hook calls must stay in the same order between renders.\",\n help: \"Call hooks at the top level of a component or custom hook, before conditional returns.\",\n },\n\n run(context) {\n const diagnostics: DiagnosticInput[] = [];\n\n if (!context.model.isReactFile) return diagnostics;\n\n const staticImports = staticIterationImports(context);\n const stableShapes = stableShapeVariablesByFunction(context);\n const moduleTables = staticModuleTables(context);\n const moduleInvariants = moduleInvariantVariables(context);\n const modeImports = conditionalHookModeImports(context);\n const ignoredHookImports = nonReactHookImports(context);\n const currentModeSummary = currentConditionalHookMode(context);\n const callbacks = callbackFunctions(context);\n const reachableReturns = new Map<number, SyntaxNode[]>();\n\n for (const call of context.findCalls()) {\n const rawPath = context.getCallPath(call);\n\n if (!rawPath) continue;\n\n if (ignoredHookImports.has(rawPath)) continue;\n\n const path = context.resolveCallPath(rawPath);\n\n if (!isHookPath(path)) continue;\n\n const fn = context.nearestFunction(call);\n\n if (\n !fn ||\n (!fn.isComponent && !fn.isHook) ||\n callbacks.has(fn.node.id)\n ) {\n diagnostics.push({\n node: callNameNode(call),\n message: `Hook ${path} is called outside a React component or custom hook`,\n help: \"Move the hook into a component or a custom hook whose name starts with use\",\n\n fixPreview: {\n kind: \"pattern\",\n before: `local value = ${path}()\\n\\nlocal function helper()\\n\\treturn value\\nend`,\n after: `local function useHelper()\\n\\tlocal value = ${path}()\\n\\treturn value\\nend`,\n note: \"Hooks need a React-owned component or custom-hook call stack\",\n },\n });\n\n continue;\n }\n\n const importedMode = modeImports.get(rawPath);\n\n if (importedMode) {\n const args = context.callArguments(call);\n\n const unstableControls = importedMode.parameterIndexes.flatMap(\n (index) =>\n controlledAccessPaths(importedMode, index)\n .map((accessPath) => {\n const argument = args[index];\n const value = tableFieldValue(argument, accessPath);\n\n const stability =\n accessPath !== \"\"\n ? argument?.type === \"table_constructor\"\n ? value\n ? modeValueStability(\n value,\n fn,\n context,\n moduleInvariants,\n )\n : \"stable\"\n : \"unknown\"\n : modeValueStability(\n argument,\n fn,\n context,\n moduleInvariants,\n );\n\n return { index, accessPath, argument, value, stability };\n })\n .filter((control) => control.stability === \"unstable\"),\n );\n\n if (unstableControls.length > 0) {\n const first = unstableControls[0];\n const firstIndex = first.index;\n const argument = first.argument;\n\n const parameterOffset =\n importedMode.parameterIndexes.indexOf(firstIndex);\n\n const baseParameterName =\n importedMode.parameterNames[parameterOffset] ??\n `argument ${firstIndex + 1}`;\n\n const parameterName = first.accessPath\n ? `${baseParameterName}.${first.accessPath}`\n : baseParameterName;\n\n const argumentText =\n first.value?.text.trim() || argument?.text.trim() || \"<omitted>\";\n\n diagnostics.push({\n node: first.value ?? argument ?? callNameNode(call),\n\n highlights: unstableControls\n .map((control) => control.value ?? control.argument)\n .filter((node): node is SyntaxNode => Boolean(node)),\n\n message: `Hook ${rawPath} receives hook-topology mode ${parameterName} from ${argumentText}, which is updated between renders and can make the custom hook execute a different hook sequence.`,\n help: `Keep ${parameterName} stable for this hook instance, or refactor ${rawPath} so it always calls the same hooks regardless of that mode.`,\n fixPreview: dynamicHookModeFixPreview(rawPath, argumentText),\n });\n }\n }\n\n const controlFlow = findAncestorBetween(call, fn.node, (node) => {\n if (!conditionallyContains(node, call)) return false;\n\n if (\n currentModeSummary &&\n controlledParameterIndex(node, fn, currentModeSummary, call) !== null\n )\n return false;\n\n if (\n conditionIsProvablyInvariant(\n node,\n fn,\n context,\n moduleInvariants,\n call,\n )\n )\n return false;\n\n if (ifBranchesHaveEquivalentBuiltInTopology(node, fn, context))\n return false;\n\n if (\n node.type === \"for_statement\" &&\n loopIterationIsProvablyStable(\n node,\n staticImports,\n fn,\n stableShapes,\n moduleTables,\n context,\n moduleInvariants,\n )\n )\n return false;\n\n return true;\n });\n\n if (controlFlow) {\n const kind = controlFlow.type === \"binary_expression\"\n ? \"short-circuit expression\"\n : controlFlow.type.replaceAll(\"_\", \" \");\n\n const loopLike =\n controlFlow.type === \"for_statement\" ||\n controlFlow.type === \"while_statement\" ||\n controlFlow.type === \"repeat_statement\";\n\n diagnostics.push({\n node: callNameNode(call),\n\n message: loopLike\n ? `Hook ${path} is called inside ${kind} whose size or iteration order may change between renders. If that happens, React will see a different hook sequence`\n : `Hook ${path} is called inside ${kind}, so the hook may be skipped on some renders`,\n\n summary: loopLike\n ? `${path} may run a different number of times between renders`\n : `${path} may be skipped on some renders`,\n\n explanation: loopLike\n ? `This ${kind} may change how many times ${path} is called`\n : `This ${kind} can skip ${path} on some renders`,\n\n help: loopLike\n ? \"Keep hook count independent of runtime collection size or loop iterations. A common fix is to render a child component per item and call the hook inside that child\"\n : \"Call the hook unconditionally at the top level, then branch on the returned value\",\n\n fixPreview: conditionalFixPreview(kind, path),\n });\n\n continue;\n }\n\n const earlierReturns = reachableReturnsBefore(\n call,\n fn,\n context,\n reachableReturns,\n );\n\n if (\n earlierReturns.length > 0 &&\n !earlierReturns.every((node) =>\n returnIsControlledByStableTopologyMode(\n node,\n fn,\n currentModeSummary,\n context,\n moduleInvariants,\n ),\n )\n ) {\n diagnostics.push({\n node: callNameNode(call),\n message: `Hook ${path} may run after an earlier reachable return, so some renders can execute fewer hooks.`,\n help: \"Move the hook before reachable early returns so hook order cannot change between renders.\",\n fixPreview: earlyReturnFixPreview(path),\n });\n }\n }\n\n return diagnostics;\n },\n};\n",
38
40
  "import type { SyntaxNode } from \"../syntax\";\r\n\r\nimport type {\r\n DiagnosticInput,\r\n FunctionInfo,\r\n RuleContext,\r\n RuleDefinition,\r\n StateBinding,\r\n} from \"../types\";\r\n\r\nimport { sameNode } from \"../ast/walk\";\r\n\r\nimport {\r\n assignmentTargetNode,\r\n callNameNode,\r\n containsUnshadowedIdentifier,\r\n identifierNode,\r\n isBindingShadowedBetween,\r\n stateBindingsFor,\r\n} from \"./helpers\";\r\n\r\nimport {\r\n mightMutateParameters,\r\n mutatedParameterIndexesForCall,\r\n mutationOriginForExpression,\r\n} from \"./parameter-mutations\";\r\n\r\nconst TRIVIAL_INITIALIZER_PATHS = new Set([\r\n \"tostring\",\r\n \"tonumber\",\r\n \"type\",\r\n \"typeof\",\r\n \"math.abs\",\r\n \"math.ceil\",\r\n \"math.floor\",\r\n \"math.max\",\r\n \"math.min\",\r\n \"math.round\",\r\n \"string.lower\",\r\n \"string.upper\",\r\n \"string.format\",\r\n \"table.pack\",\r\n \"Vector2.new\",\r\n \"Vector3.new\",\r\n \"Vector2int16.new\",\r\n \"Vector3int16.new\",\r\n \"UDim.new\",\r\n \"UDim2.new\",\r\n \"UDim2.fromOffset\",\r\n \"UDim2.fromScale\",\r\n \"CFrame.new\",\r\n \"Color3.new\",\r\n \"Color3.fromRGB\",\r\n \"Color3.fromHSV\",\r\n \"Rect.new\",\r\n \"NumberRange.new\",\r\n \"TweenInfo.new\",\r\n]);\r\n\r\nfunction isTrivialInitializerPath(path: string): boolean {\r\n return (\r\n TRIVIAL_INITIALIZER_PATHS.has(path) || /(?:^|[.:])getValue$/i.test(path)\r\n );\r\n}\r\n\r\nfunction isNestedFunctionFromOwner(\r\n context: RuleContext,\r\n node: SyntaxNode,\r\n owner: FunctionInfo,\r\n): boolean {\r\n const nearest = context.nearestFunction(node);\r\n\r\n return Boolean(nearest && nearest !== owner);\r\n}\r\n\r\nfunction callsSetter(\r\n context: RuleContext,\r\n owner: FunctionInfo,\r\n setterName: string,\r\n): boolean {\r\n if (!owner.body) return false;\r\n\r\n for (const call of context.walk(owner.body)) {\r\n if (\r\n call.type === \"function_call\" &&\r\n context.getCallPath(call) === setterName\r\n )\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isIdentifierRead(node: SyntaxNode, name: string): boolean {\r\n if (node.type !== \"identifier\" || node.text !== name) return false;\r\n\r\n const parent = node.parent;\r\n\r\n if (\r\n parent?.type === \"dot_index_expression\" &&\r\n sameNode(parent.childForFieldName(\"field\"), node)\r\n )\r\n return false;\r\n\r\n if (\r\n parent?.type === \"method_index_expression\" &&\r\n sameNode(parent.namedChildren.at(-1), node)\r\n )\r\n return false;\r\n\r\n return true;\r\n}\r\n\r\nfunction renderReachableNestedFunctions(\r\n context: RuleContext,\r\n owner: FunctionInfo,\r\n): Set<FunctionInfo> {\r\n const reachable = new Set<FunctionInfo>();\r\n\r\n if (!owner.body) return reachable;\r\n\r\n const byName = new Map<string, FunctionInfo>();\r\n\r\n for (const fn of context.model.functions) {\r\n if (!fn.name || fn === owner) continue;\r\n\r\n let current = fn.node.parent;\r\n\r\n while (current) {\r\n const parentInfo = context.model.functionByNode.get(current.id);\r\n\r\n if (parentInfo) {\r\n if (parentInfo === owner) byName.set(fn.name, fn);\r\n\r\n break;\r\n }\r\n\r\n current = current.parent;\r\n }\r\n }\r\n\r\n const pending: FunctionInfo[] = [];\r\n\r\n const addByName = (name: string | undefined) => {\r\n if (!name) return;\r\n\r\n const fn = byName.get(name);\r\n\r\n if (!fn || reachable.has(fn)) return;\r\n\r\n reachable.add(fn);\r\n pending.push(fn);\r\n };\r\n\r\n for (const call of context.walk(owner.body)) {\r\n if (\r\n call.type !== \"function_call\" ||\r\n context.nearestFunction(call) !== owner\r\n )\r\n continue;\r\n\r\n const path = context.getCallPath(call) ?? \"\";\r\n const resolved = context.resolveCallPath(path);\r\n\r\n if (resolved === \"React.createElement\")\r\n addByName(context.callArguments(call)[0]?.text.trim());\r\n else addByName(path);\r\n }\r\n\r\n while (pending.length > 0) {\r\n const fn = pending.pop()!;\r\n\r\n if (!fn.body) continue;\r\n\r\n for (const call of context.walk(fn.body)) {\r\n if (call.type !== \"function_call\" || context.nearestFunction(call) !== fn)\r\n continue;\r\n\r\n const path = context.getCallPath(call) ?? \"\";\r\n const resolved = context.resolveCallPath(path);\r\n\r\n if (resolved === \"React.createElement\")\r\n addByName(context.callArguments(call)[0]?.text.trim());\r\n else addByName(path);\r\n }\r\n }\r\n\r\n return reachable;\r\n}\r\n\r\nfunction directlyReadsValue(\r\n context: RuleContext,\r\n owner: FunctionInfo,\r\n binding: StateBinding,\r\n): boolean {\r\n if (!owner.body) return false;\r\n\r\n for (const node of context.walk(owner.body)) {\r\n if (!isIdentifierRead(node, binding.valueName)) continue;\r\n\r\n if (\r\n node.startIndex >= binding.declaration.startIndex &&\r\n node.endIndex <= binding.declaration.endIndex\r\n )\r\n continue;\r\n\r\n if (isNestedFunctionFromOwner(context, node, owner)) continue;\r\n\r\n if (\r\n isBindingShadowedBetween(\r\n node,\r\n owner,\r\n binding.valueName,\r\n binding.declaration,\r\n )\r\n )\r\n continue;\r\n\r\n return true;\r\n }\r\n\r\n for (const fn of renderReachableNestedFunctions(context, owner)) {\r\n if (!fn.body) continue;\r\n\r\n for (const node of context.walk(fn.body)) {\r\n if (\r\n isIdentifierRead(node, binding.valueName) &&\r\n !isBindingShadowedBetween(\r\n node,\r\n owner,\r\n binding.valueName,\r\n binding.declaration,\r\n )\r\n )\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isPlainTableState(\r\n binding: StateBinding,\r\n context: RuleContext,\r\n): boolean {\r\n const initializer = binding.initializer;\r\n\r\n if (!initializer) return true;\r\n\r\n if (initializer.type === \"table_constructor\") return true;\r\n\r\n if (initializer.type !== \"function_call\") return false;\r\n\r\n const path = context.getCallPath(initializer) ?? \"\";\r\n\r\n return (\r\n path === \"table.clone\" || path === \"table.create\" || path === \"table.pack\"\r\n );\r\n}\r\n\r\ntype CallbackLifetime =\r\n \"long-lived\" | \"custom-hook\" | \"render-handler\" | \"unknown\";\r\n\r\nfunction callbackLifetime(\r\n context: RuleContext,\r\n call: SyntaxNode,\r\n owner: FunctionInfo,\r\n): CallbackLifetime {\r\n const callback = context.nearestFunction(call);\r\n\r\n if (!callback || callback === owner) return \"unknown\";\r\n\r\n let current: SyntaxNode | null = callback.node;\r\n\r\n while (\r\n current &&\r\n current.startIndex >= owner.node.startIndex &&\r\n current.endIndex <= owner.node.endIndex\r\n ) {\r\n if (current.type === \"function_call\") {\r\n const path = context.resolveCallPath(context.getCallPath(current) ?? \"\");\r\n\r\n if (\r\n path === \"React.useEffect\" ||\r\n path === \"React.useLayoutEffect\" ||\r\n path === \"task.spawn\" ||\r\n path === \"task.defer\" ||\r\n path === \"task.delay\" ||\r\n /:Connect$/.test(path) ||\r\n /BindToRenderStep$/.test(path) ||\r\n /:BindAction(?:AtPriority)?$/.test(path) ||\r\n /:BindActivate$/.test(path)\r\n ) {\r\n return \"long-lived\";\r\n }\r\n\r\n if (path === \"React.createElement\") return \"render-handler\";\r\n\r\n const final = path.split(/[.:]/).at(-1) ?? \"\";\r\n\r\n if (/^use[A-Z0-9_]/.test(final)) return \"custom-hook\";\r\n }\r\n\r\n if (\r\n current.type === \"function_definition\" ||\r\n current.type === \"function_declaration\"\r\n ) {\r\n if (\r\n current.startIndex !== callback.node.startIndex ||\r\n current.endIndex !== callback.node.endIndex\r\n )\r\n break;\r\n }\r\n\r\n current = current.parent;\r\n }\r\n\r\n return \"unknown\";\r\n}\r\n\r\nexport const rerenderFunctionalSetstate: RuleDefinition = {\r\n id: \"react-luau/rerender-functional-setstate\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Use the functional state setter form when deferred callbacks update from the previous state value.\",\r\n\r\n run(context) {\r\n const diagnostics: DiagnosticInput[] = [];\r\n\r\n for (const binding of context.model.stateBindings) {\r\n const owner = binding.owner;\r\n\r\n if (!owner?.body) continue;\r\n\r\n for (const call of context.walk(owner.body)) {\r\n if (\r\n call.type !== \"function_call\" ||\r\n context.getCallPath(call) !== binding.setterName\r\n )\r\n continue;\r\n\r\n if (!isNestedFunctionFromOwner(context, call, owner)) continue;\r\n\r\n const argument = context.callArguments(call)[0];\r\n\r\n if (!argument || argument.type === \"function_definition\") continue;\r\n\r\n if (\r\n !containsUnshadowedIdentifier(\r\n argument,\r\n binding.valueName,\r\n context,\r\n owner,\r\n )\r\n )\r\n continue;\r\n\r\n const lifetime = callbackLifetime(context, call, owner);\r\n\r\n if (lifetime === \"render-handler\" || lifetime === \"unknown\") continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(call),\r\n severity: lifetime === \"custom-hook\" ? \"suggestion\" : \"warning\",\r\n message: `${binding.setterName}() reads ${binding.valueName} from a captured callback value.`,\r\n\r\n help:\r\n lifetime === \"custom-hook\"\r\n ? `Use ${binding.setterName}(function(previous) return ... end) if the custom hook can retain this callback across renders.`\r\n : `Use ${binding.setterName}(function(previous) return ... end) when the next value depends on previous state.`,\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const rerenderLazyStateInit: RuleDefinition = {\r\n id: \"react-luau/rerender-lazy-state-init\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Expensive useState initializers should use React's lazy initializer form.\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (path !== \"React.useState\") continue;\r\n\r\n const initializer = context.callArguments(call)[0];\r\n\r\n if (!initializer || initializer.type === \"function_definition\") continue;\r\n\r\n const eagerCall = [...context.walk(initializer)].find(\r\n (node) => node.type === \"function_call\",\r\n );\r\n\r\n if (!eagerCall) continue;\r\n\r\n const eagerPath = context.resolveCallPath(\r\n context.getCallPath(eagerCall) ?? \"\",\r\n );\r\n\r\n if (\r\n isTrivialInitializerPath(eagerPath) ||\r\n /^React\\.use[A-Z0-9_]/.test(eagerPath)\r\n )\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(eagerCall),\r\n message: `${eagerPath || \"This initializer call\"} is evaluated every render before useState can reuse the existing state.`,\r\n summary: `${eagerPath || \"This initializer\"} runs every render. Pass an initializer function to useState.`,\r\n help: \"Wrap expensive initial state creation in function() ... end so it only runs when the state is first initialized.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const rerenderLazyRefInit: RuleDefinition = {\r\n id: \"react-luau/rerender-lazy-ref-init\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"Avoid eagerly rebuilding expensive values passed to useRef on every render.\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n\r\n if (path !== \"React.useRef\") continue;\r\n\r\n const initializer = context.callArguments(call)[0];\r\n\r\n if (!initializer || initializer.type !== \"function_call\") continue;\r\n\r\n const eagerPath = context.resolveCallPath(\r\n context.getCallPath(initializer) ?? \"\",\r\n );\r\n\r\n if (\r\n isTrivialInitializerPath(eagerPath) ||\r\n /^React\\.use[A-Z0-9_]/.test(eagerPath)\r\n )\r\n continue;\r\n\r\n diagnostics.push({\r\n node: callNameNode(initializer),\r\n message: `${eagerPath || \"This initializer call\"} is rebuilt before useRef returns the existing ref on every render.`,\r\n help: \"Initialize the ref from a predictable nil-guarded render pattern when construction is pure, or create owned resources in an effect with cleanup. Do not put side-effectful resource creation into useRef just to silence this warning.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const rerenderStateOnlyInHandlers: RuleDefinition = {\r\n id: \"react-luau/rerender-state-only-in-handlers\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n\r\n description:\r\n \"State that is only read from callbacks may be mutable data rather than rendered state.\",\r\n\r\n guidance: {\r\n explanation:\r\n \"This state is written, but the component does not read it while rendering or preparing hooks.\",\r\n\r\n help: \"Use a ref when callbacks need the latest value without rerendering. Keep state if a write must update the UI or an effect dependency.\",\r\n },\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const owner of context.model.functions) {\r\n if (!owner.isComponent) continue;\r\n\r\n for (const binding of stateBindingsFor(context, owner)) {\r\n if (binding.valueName === \"_\" || binding.valueName.startsWith(\"_\"))\r\n continue;\r\n\r\n if (\r\n /^(set)?(?:TriggerRender|ForceUpdate|Rerender|ForceRender|Tick|Bump|BumpVersion|InvalidateRender|Refresh|Repaint)$/i.test(\r\n binding.setterName,\r\n )\r\n )\r\n continue;\r\n\r\n if (!callsSetter(context, owner, binding.setterName)) continue;\r\n\r\n if (directlyReadsValue(context, owner, binding)) continue;\r\n\r\n diagnostics.push({\r\n node:\r\n identifierNode(binding.declaration, binding.valueName) ??\r\n binding.declaration,\r\n\r\n message: `${binding.valueName} is updated as React state but is never read by the component's render path or hook arguments.`,\r\n summary: `${binding.valueName} isn't read during render. Use a ref if updates needn't rerender.`,\r\n help: \"When a value is only read by event or signal callbacks, consider useRef so updates do not rerender the component. Keep useState when the update intentionally invalidates rendering or feeds a hook dependency.\",\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n\r\nexport const noDirectStateMutation: RuleDefinition = {\r\n id: \"react-luau/no-direct-state-mutation\",\r\n category: \"Correctness\",\r\n severity: \"warning\",\r\n description: \"Do not mutate table state in place.\",\r\n\r\n run(context) {\r\n const diagnostics = [];\r\n const seen = new Set<string>();\r\n\r\n for (const binding of context.model.stateBindings) {\r\n const owner = binding.owner;\r\n\r\n if (!owner?.body || !isPlainTableState(binding, context)) continue;\r\n\r\n const escaped = binding.valueName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n\r\n for (const node of context.walk(owner.body)) {\r\n if (\r\n node.startIndex >= binding.declaration.startIndex &&\r\n node.endIndex <= binding.declaration.endIndex\r\n )\r\n continue;\r\n\r\n let mutates = false;\r\n\r\n if (\r\n node.type === \"assignment_statement\" ||\r\n node.type === \"update_statement\"\r\n ) {\r\n mutates = new RegExp(`^\\\\s*${escaped}\\\\s*(?:\\\\.|\\\\[)`).test(\r\n node.text,\r\n );\r\n } else if (\r\n node.type === \"function_call\" &&\r\n mightMutateParameters(context, node)\r\n ) {\r\n const arguments_ = context.callArguments(node);\r\n\r\n for (const index of mutatedParameterIndexesForCall(\r\n context,\r\n node,\r\n owner,\r\n )) {\r\n const argument = arguments_[index];\r\n\r\n if (!argument) continue;\r\n\r\n const origin = mutationOriginForExpression(\r\n context,\r\n argument,\r\n owner,\r\n );\r\n\r\n if (origin.kind === \"state\" && origin.binding === binding) {\r\n mutates = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (\r\n !mutates ||\r\n isBindingShadowedBetween(\r\n node,\r\n owner,\r\n binding.valueName,\r\n binding.declaration,\r\n )\r\n )\r\n continue;\r\n\r\n const key = `${node.startIndex}:${binding.valueName}`;\r\n\r\n if (seen.has(key)) continue;\r\n\r\n seen.add(key);\r\n\r\n diagnostics.push({\r\n node:\r\n node.type === \"function_call\"\r\n ? callNameNode(node)\r\n : assignmentTargetNode(node),\r\n\r\n message: `${binding.valueName} is React state backed by a table and is mutated in place.`,\r\n summary: `${binding.valueName} is mutated in place. Create a new table before updating state.`,\r\n help: `Create a new table and pass the new identity to ${binding.setterName}. In-place mutation can leave React with the same state identity and makes update ordering harder to reason about.`,\r\n });\r\n }\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
39
- "import type { RuleDefinition } from \"../types\";\r\nimport { fieldName, fieldNameNode, fieldValue } from \"./helpers\";\r\n\r\nexport const unstableContextValue: RuleDefinition = {\r\n id: \"react-luau/unstable-context-value\",\r\n category: \"Performance\",\r\n severity: \"warning\",\r\n description: \"Avoid recreating context value tables on every provider render when identity matters.\",\r\n run(context) {\r\n const diagnostics = [];\r\n\r\n for (const call of context.findCalls()) {\r\n const component = context.containingComponent(call);\r\n if (!component || !context.isDirectlyExecutedInFunction(call, component)) continue;\r\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\r\n if (path !== \"React.createElement\") continue;\r\n const args = context.callArguments(call);\r\n const element = args[0]?.text ?? \"\";\r\n const props = args[1];\r\n if (!/\\.Provider$/.test(element) || !props || props.type !== \"table_constructor\") continue;\r\n const valueField = props.namedChildren.find((field) =>\r\n field.type === \"field\" && fieldName(field) === \"value\" && fieldValue(field)?.type === \"table_constructor\"\r\n );\r\n if (!valueField) continue;\r\n\r\n diagnostics.push({\r\n node: fieldNameNode(valueField),\r\n message: \"Context Provider receives a new inline value table on every render.\",\r\n help: \"Memoize the provider value from its real dependencies when consumer updates depend on object identity.\",\r\n });\r\n }\r\n\r\n return diagnostics;\r\n },\r\n};\r\n",
41
+ "import type { RuleDefinition } from \"../types\";\nimport { fieldName, fieldNameNode, fieldValue } from \"./helpers\";\nimport { freshValueKind } from \"../ast/value-identity\";\n\nexport const unstableContextValue: RuleDefinition = {\n id: \"react-luau/unstable-context-value\",\n category: \"Performance\",\n severity: \"warning\",\n description:\n \"Avoid recreating context reference values during render when identity matters\",\n\n run(context) {\n const diagnostics = [];\n\n for (const call of context.findCalls()) {\n const component = context.containingComponent(call);\n\n if (!component || !context.isDirectlyExecutedInFunction(call, component))\n continue;\n\n const path = context.resolveCallPath(context.getCallPath(call) ?? \"\");\n\n if (path !== \"React.createElement\") continue;\n\n const args = context.callArguments(call);\n const element = args[0]?.text ?? \"\";\n const props = args[1];\n\n if (\n !/\\.Provider$/.test(element) ||\n !props ||\n props.type !== \"table_constructor\"\n )\n continue;\n\n const valueField = props.namedChildren.find(\n (field) =>\n field.type === \"field\" &&\n fieldName(field) === \"value\" &&\n freshValueKind(context, fieldValue(field), component),\n );\n\n if (!valueField) continue;\n\n diagnostics.push({\n node: fieldNameNode(valueField),\n message:\n \"Context Provider can receive a new reference value when the component renders\",\n help: \"Memoize the provider value from its real dependencies when consumer updates depend on object identity\",\n });\n }\n\n return diagnostics;\n },\n};\n",
40
42
  "import type { RuleDefinition } from \"../types\";\nimport {\n noBindingGetValueInRender,\n noCreateBindingInRender,\n} from \"./binding-rules\";\nimport { noCallComponentAsFunction } from \"./no-call-component-as-function\";\nimport { noMutatingStateUpdater } from \"./no-mutating-state-updater\";\nimport { useMemoMustReturn } from \"./usememo-must-return\";\nimport { fixExampleForRule } from \"./examples\";\nimport { effectNeedsCleanup } from \"./effect-needs-cleanup\";\n\nimport {\n noDerivedStateEffect,\n noEffectWithFreshDeps,\n noMutableInDeps,\n noSelfUpdatingEffect,\n} from \"./effect-state-rules\";\n\nimport { exhaustiveDeps } from \"./exhaustive-deps\";\nimport { noArrayIndexAsKey } from \"./no-array-index-as-key\";\nimport { noCreateContextInRender } from \"./no-create-context-in-render\";\nimport { noNestedComponentDefinition } from \"./no-nested-component-definition\";\nimport { noPropMutation } from \"./no-prop-mutation\";\nimport { noStaticNameProp } from \"./no-static-name-prop\";\nimport { noRandomKey } from \"./no-random-key\";\nimport { noSetStateInRender } from \"./no-set-state-in-render\";\nimport { parseErrors } from \"./parse-errors\";\n\nimport {\n preferUseRefForMutableCell,\n rerenderHighFrequencyState,\n rerenderRepeatedCollectionScan,\n rerenderStaticDiscoveryInRender,\n rerenderStaticState,\n rerenderUnnecessaryUseCallback,\n rerenderUnnecessaryUseMemo,\n rerenderUnstableMemoProps,\n} from \"./performance-rules\";\n\nimport {\n preferBindingOverState,\n preferBindingOverStateCandidate,\n} from \"./prefer-binding-over-state\";\n\nimport { noCreateRootInRender } from \"./react-roblox-lifecycle\";\nimport { noRefCurrentInRender } from \"./ref-rules\";\n\nimport {\n noSideEffectsInRender,\n noTaskSpawnInRender,\n noYieldInRender,\n} from \"./render-side-effects\";\n\nimport { rulesOfHooks } from \"./rules-of-hooks\";\n\nimport {\n noDirectStateMutation,\n rerenderFunctionalSetstate,\n rerenderLazyRefInit,\n rerenderLazyStateInit,\n rerenderStateOnlyInHandlers,\n} from \"./state-performance\";\n\nimport { unstableContextValue } from \"./unstable-context-value\";\n\nconst definitions: RuleDefinition[] = [\n parseErrors,\n rulesOfHooks,\n exhaustiveDeps,\n effectNeedsCleanup,\n noDerivedStateEffect,\n noSelfUpdatingEffect,\n noEffectWithFreshDeps,\n noMutableInDeps,\n preferBindingOverState,\n preferBindingOverStateCandidate,\n rerenderUnstableMemoProps,\n rerenderHighFrequencyState,\n rerenderUnnecessaryUseMemo,\n rerenderUnnecessaryUseCallback,\n rerenderStaticDiscoveryInRender,\n rerenderRepeatedCollectionScan,\n rerenderStaticState,\n preferUseRefForMutableCell,\n rerenderFunctionalSetstate,\n rerenderLazyStateInit,\n rerenderLazyRefInit,\n rerenderStateOnlyInHandlers,\n noSetStateInRender,\n noMutatingStateUpdater,\n noCallComponentAsFunction,\n noCreateBindingInRender,\n noBindingGetValueInRender,\n useMemoMustReturn,\n noDirectStateMutation,\n noRefCurrentInRender,\n noCreateContextInRender,\n noNestedComponentDefinition,\n noRandomKey,\n noYieldInRender,\n noTaskSpawnInRender,\n noSideEffectsInRender,\n noCreateRootInRender,\n noPropMutation,\n noStaticNameProp,\n noArrayIndexAsKey,\n unstableContextValue,\n];\n\nexport const rules: RuleDefinition[] = definitions.map((rule) => ({\n ...rule,\n\n guidance: {\n ...rule.guidance,\n example: rule.guidance?.example ?? fixExampleForRule(rule.id),\n },\n}));\n\nexport const rulesById = new Map(rules.map((rule) => [rule.id, rule]));\n",
41
- "import { spawnSync } from \"node:child_process\";\r\nimport { createHash } from \"node:crypto\";\r\nimport fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport readline from \"node:readline/promises\";\r\nimport { stdin as input, stdout as output } from \"node:process\";\r\nimport { isSelectedLuauPath } from \"./files\";\r\nimport { loadConfigWithSource } from \"./config\";\r\nimport { createGitScopePlan, findGitRoot } from \"./git\";\r\nimport type { LineRange } from \"./git\";\r\nimport { renderAnnotations, renderTextReport } from \"./reporter\";\r\nimport { aggregateReports, scanProjectWithScope } from \"./scope\";\r\nimport { scanPath } from \"./scanner\";\r\nimport type { BlockingLevel, Diagnostic, ScanReport, ScanScope } from \"./types\";\r\nimport packageJson from \"../package.json\";\r\n\r\nexport type CiProvider = \"github\" | \"gitlab\";\r\n\r\ninterface CiSettings {\r\n provider: CiProvider;\r\n blocking: BlockingLevel;\r\n scope: ScanScope;\r\n comment: boolean;\r\n reviewComments: boolean;\r\n commitStatus: boolean;\r\n directory: string;\r\n project: string;\r\n}\r\n\r\ninterface CiManageOptions extends Partial<CiSettings> {\r\n cwd: string;\r\n yes: boolean;\r\n pr: boolean;\r\n}\r\n\r\ninterface GitHubEvent {\r\n action?: string;\r\n before?: string;\r\n pull_request?: {\r\n number: number;\r\n base: { sha: string; ref: string };\r\n head: { sha: string; ref: string };\r\n };\r\n repository?: { full_name?: string };\r\n}\r\n\r\nconst DEFAULT_SETTINGS: CiSettings = {\r\n provider: \"github\",\r\n blocking: \"none\",\r\n scope: \"changed\",\r\n comment: true,\r\n reviewComments: true,\r\n commitStatus: true,\r\n directory: \".\",\r\n project: \"*\",\r\n};\r\n\r\nconst GITHUB_WORKFLOW = path.join(\".github\", \"workflows\", \"react-luau-doctor.yml\");\r\nconst GITLAB_WORKFLOW = \".gitlab-ci.yml\";\r\nconst SUMMARY_MARKER = \"<!-- react-luau-doctor:summary -->\";\r\nconst REVIEW_MARKER = \"<!-- react-luau-doctor:review -->\";\r\nconst MAX_REVIEW_COMMENTS = 20;\r\nconst MAX_GITHUB_RETRIES = 2;\r\nconst MAX_RATE_LIMIT_WAIT_MS = 60_000;\r\nconst PACKAGE_SPEC = `${packageJson.name}@${packageJson.version}`;\r\nfunction yamlString(value: string): string {\r\n return JSON.stringify(value);\r\n}\r\n\r\nexport function renderGitHubWorkflow(settings: CiSettings): string {\r\n return `name: React-Luau Doctor\r\non:\r\n pull_request:\r\n types: [opened, synchronize, reopened, ready_for_review]\r\n push:\r\n branches: [main]\r\n\r\npermissions:\r\n contents: read\r\n pull-requests: write\r\n statuses: write\r\n\r\nconcurrency:\r\n group: react-luau-doctor-\\${{ github.event.pull_request.number || github.ref }}\r\n cancel-in-progress: true\r\n\r\njobs:\r\n react-luau-doctor:\r\n runs-on: ubuntu-latest\r\n steps:\r\n - uses: actions/checkout@v5\r\n with:\r\n fetch-depth: 0\r\n - uses: oven-sh/setup-bun@v2\r\n with:\r\n bun-version: \"1.4.0\"\r\n - id: doctor\r\n env:\r\n GITHUB_TOKEN: \\${{ github.token }}\r\n DOCTOR_DIRECTORY: ${yamlString(settings.directory)}\r\n DOCTOR_PROJECT: ${yamlString(settings.project)}\r\n DOCTOR_BLOCKING: ${settings.blocking}\r\n DOCTOR_SCOPE: ${settings.scope}\r\n run: >-\r\n bunx --bun ${PACKAGE_SPEC} ci run\r\n --directory \"$DOCTOR_DIRECTORY\"\r\n --project \"$DOCTOR_PROJECT\"\r\n --blocking \"$DOCTOR_BLOCKING\"\r\n --scope \"$DOCTOR_SCOPE\"\r\n ${settings.comment ? \"--comment\" : \"--no-comment\"}\r\n ${settings.reviewComments ? \"--review-comments\" : \"--no-review-comments\"}\r\n ${settings.commitStatus ? \"--commit-status\" : \"--no-commit-status\"}\r\n`;\r\n}\r\n\r\nexport function renderGitLabWorkflow(settings: CiSettings): string {\r\n return `stages:\r\n - test\r\n\r\nreact-luau-doctor:\r\n stage: test\r\n image: oven/bun:1.4.0\r\n variables:\r\n GIT_DEPTH: \"0\"\r\n DOCTOR_DIRECTORY: ${yamlString(settings.directory)}\r\n DOCTOR_SCOPE: ${yamlString(settings.scope)}\r\n DOCTOR_BLOCKING: ${yamlString(settings.blocking)}\r\n script:\r\n - 'bunx --bun ${PACKAGE_SPEC} \"$DOCTOR_DIRECTORY\" --scope \"$DOCTOR_SCOPE\" --blocking \"$DOCTOR_BLOCKING\" --no-color'\r\n`;\r\n}\r\n\r\nfunction parseBoolean(value: string, name: string): boolean {\r\n if (value === \"true\") return true;\r\n if (value === \"false\") return false;\r\n throw new Error(`${name} must be true or false`);\r\n}\r\n\r\nfunction parseBlocking(value: string): BlockingLevel {\r\n if (value !== \"error\" && value !== \"warning\" && value !== \"none\") throw new Error(\"--blocking must be error, warning, or none\");\r\n return value;\r\n}\r\n\r\nfunction parseScope(value: string): ScanScope {\r\n if (value !== \"full\" && value !== \"files\" && value !== \"changed\" && value !== \"lines\") {\r\n throw new Error(\"--scope must be full, files, changed, or lines\");\r\n }\r\n return value;\r\n}\r\n\r\nfunction parseProvider(value: string): CiProvider {\r\n if (value !== \"github\" && value !== \"gitlab\") throw new Error(\"--provider must be github or gitlab\");\r\n return value;\r\n}\r\n\r\nfunction nextValue(argv: string[], index: number, flag: string): { value: string; nextIndex: number } {\r\n const value = argv[index + 1];\r\n if (!value || value.startsWith(\"--\")) throw new Error(`${flag} requires a value`);\r\n return { value, nextIndex: index + 1 };\r\n}\r\n\r\nfunction parseCiManageOptions(argv: string[], action: \"install\" | \"config\" | \"upgrade\"): CiManageOptions {\r\n const options: CiManageOptions = { cwd: process.cwd(), yes: false, pr: false };\r\n for (let index = 0; index < argv.length; index += 1) {\r\n const arg = argv[index];\r\n if (arg === \"--yes\" || arg === \"-y\") options.yes = true;\r\n else if (arg === \"--pr\") {\r\n if (action === \"config\") throw new Error(\"ci config does not accept --pr\");\r\n options.pr = true;\r\n } else if (arg === \"--cwd\") {\r\n const parsed = nextValue(argv, index, arg);\r\n options.cwd = path.resolve(parsed.value);\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--provider\") {\r\n const parsed = nextValue(argv, index, arg);\r\n options.provider = parseProvider(parsed.value);\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--blocking\") {\r\n const parsed = nextValue(argv, index, arg);\r\n options.blocking = parseBlocking(parsed.value);\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--scope\") {\r\n const parsed = nextValue(argv, index, arg);\r\n options.scope = parseScope(parsed.value);\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--comment\") options.comment = true;\r\n else if (arg === \"--no-comment\") options.comment = false;\r\n else if (arg === \"--review-comments\") options.reviewComments = true;\r\n else if (arg === \"--no-review-comments\") options.reviewComments = false;\r\n else if (arg === \"--commit-status\") options.commitStatus = true;\r\n else if (arg === \"--no-commit-status\") options.commitStatus = false;\r\n else throw new Error(`Unknown ci ${action} option: ${arg}`);\r\n }\r\n return options;\r\n}\r\n\r\nfunction parseManagedWorkflowSettings(filename: string): Partial<CiSettings> {\r\n if (!fs.existsSync(filename)) return {};\r\n const text = fs.readFileSync(filename, \"utf8\");\r\n const match = (name: string): string | undefined => text.match(new RegExp(`^\\\\s*${name}:\\\\s*(.+?)\\\\s*$`, \"m\"))?.[1]?.replace(/^['\"]|['\"]$/g, \"\");\r\n const result: Partial<CiSettings> = { provider: filename.endsWith(\".gitlab-ci.yml\") ? \"gitlab\" : \"github\" };\r\n const blocking = match(\"DOCTOR_BLOCKING\") ?? match(\"blocking\");\r\n const scope = match(\"DOCTOR_SCOPE\") ?? match(\"scope\");\r\n const project = match(\"DOCTOR_PROJECT\") ?? match(\"project\");\r\n const directory = match(\"DOCTOR_DIRECTORY\") ?? match(\"directory\");\r\n const flag = (enabled: string, disabled: string): boolean | undefined => {\r\n if (text.includes(disabled)) return false;\r\n if (text.includes(enabled)) return true;\r\n return undefined;\r\n };\r\n const comment = match(\"comment\") ?? flag(\"--comment\", \"--no-comment\")?.toString();\r\n const reviewComments = match(\"review-comments\") ?? flag(\"--review-comments\", \"--no-review-comments\")?.toString();\r\n const commitStatus = match(\"commit-status\") ?? flag(\"--commit-status\", \"--no-commit-status\")?.toString();\r\n if (blocking) result.blocking = parseBlocking(blocking);\r\n if (scope) result.scope = parseScope(scope);\r\n if (comment) result.comment = parseBoolean(comment, \"comment\");\r\n if (reviewComments) result.reviewComments = parseBoolean(reviewComments, \"review-comments\");\r\n if (commitStatus) result.commitStatus = parseBoolean(commitStatus, \"commit-status\");\r\n if (project) result.project = project;\r\n if (directory) result.directory = directory;\r\n return result;\r\n}\r\n\r\nfunction existingProvider(cwd: string): CiProvider | null {\r\n if (fs.existsSync(path.join(cwd, GITHUB_WORKFLOW))) return \"github\";\r\n if (fs.existsSync(path.join(cwd, GITLAB_WORKFLOW))) return \"gitlab\";\r\n return null;\r\n}\r\n\r\nasync function askChoice(question: string, choices: string[], fallback: string): Promise<string> {\r\n const rl = readline.createInterface({ input, output });\r\n try {\r\n const answer = (await rl.question(`${question} (${choices.join(\"/\")}) [${fallback}]: `)).trim();\r\n return answer || fallback;\r\n } finally {\r\n rl.close();\r\n }\r\n}\r\n\r\nasync function completeSettings(options: CiManageOptions, current: Partial<CiSettings>, action: \"install\" | \"config\" | \"upgrade\"): Promise<CiSettings> {\r\n const settings: CiSettings = { ...DEFAULT_SETTINGS, ...current, ...options };\r\n if (options.yes || action === \"upgrade\") return settings;\r\n\r\n settings.provider = parseProvider(await askChoice(\"CI provider\", [\"github\", \"gitlab\"], settings.provider));\r\n settings.blocking = parseBlocking(await askChoice(\"Blocking level\", [\"none\", \"error\", \"warning\"], settings.blocking));\r\n settings.scope = parseScope(await askChoice(\"Pull request scan scope\", [\"changed\", \"files\", \"lines\", \"full\"], settings.scope));\r\n if (settings.provider === \"github\") {\r\n settings.comment = parseBoolean(await askChoice(\"Sticky PR summary comment\", [\"true\", \"false\"], String(settings.comment)), \"comment\");\r\n settings.reviewComments = parseBoolean(await askChoice(\"Inline review comments\", [\"true\", \"false\"], String(settings.reviewComments)), \"review-comments\");\r\n settings.commitStatus = parseBoolean(await askChoice(\"Commit status\", [\"true\", \"false\"], String(settings.commitStatus)), \"commit-status\");\r\n }\r\n return settings;\r\n}\r\n\r\nfunction writeManagedCi(cwd: string, settings: CiSettings): string[] {\r\n if (settings.provider === \"github\") {\r\n const workflow = path.join(cwd, GITHUB_WORKFLOW);\r\n fs.mkdirSync(path.dirname(workflow), { recursive: true });\r\n fs.writeFileSync(workflow, renderGitHubWorkflow(settings));\r\n return [workflow];\r\n }\r\n\r\n const workflow = path.join(cwd, GITLAB_WORKFLOW);\r\n if (fs.existsSync(workflow) && !fs.readFileSync(workflow, \"utf8\").includes(\"react-luau-doctor\")) {\r\n throw new Error(\".gitlab-ci.yml already exists and is not managed by React-Luau Doctor; add the generated job manually instead of overwriting it\");\r\n }\r\n fs.writeFileSync(workflow, renderGitLabWorkflow(settings));\r\n return [workflow];\r\n}\r\n\r\nfunction runCommand(cwd: string, command: string, args: string[], allowFailure = false): string {\r\n const result = spawnSync(command, args, { cwd, encoding: \"utf8\", windowsHide: true });\r\n if (result.error) {\r\n if (allowFailure) return \"\";\r\n throw new Error(`${command} failed: ${result.error.message}`);\r\n }\r\n if ((result.status ?? 1) !== 0) {\r\n if (allowFailure) return \"\";\r\n throw new Error(`${command} ${args.join(\" \")} failed: ${(result.stderr || result.stdout || \"unknown error\").trim()}`);\r\n }\r\n return (result.stdout ?? \"\").trim();\r\n}\r\n\r\nfunction openPullRequest(cwd: string, files: string[], action: \"install\" | \"upgrade\"): void {\r\n findGitRoot(cwd);\r\n if (!runCommand(cwd, \"gh\", [\"--version\"], true)) throw new Error(\"--pr requires the GitHub CLI (gh) to be installed and authenticated\");\r\n const branch = action === \"install\" ? \"chore/add-react-luau-doctor-ci\" : \"chore/upgrade-react-luau-doctor-ci\";\r\n const title = action === \"install\" ? \"Add React-Luau Doctor CI\" : \"Upgrade React-Luau Doctor CI\";\r\n runCommand(cwd, \"git\", [\"switch\", \"-c\", branch]);\r\n runCommand(cwd, \"git\", [\"add\", \"--\", ...files.map((file) => path.relative(cwd, file))]);\r\n runCommand(cwd, \"git\", [\"commit\", \"-m\", title]);\r\n runCommand(cwd, \"git\", [\"push\", \"-u\", \"origin\", branch]);\r\n const url = runCommand(cwd, \"gh\", [\"pr\", \"create\", \"--title\", title, \"--body\", \"Adds React-Luau Doctor pull request analysis.\"]);\r\n process.stdout.write(`${url}\\n`);\r\n}\r\n\r\nasync function runCiManage(action: \"install\" | \"config\" | \"upgrade\", argv: string[]): Promise<void> {\r\n const options = parseCiManageOptions(argv, action);\r\n const provider = options.provider ?? existingProvider(options.cwd) ?? DEFAULT_SETTINGS.provider;\r\n const workflowPath = path.join(options.cwd, provider === \"github\" ? GITHUB_WORKFLOW : GITLAB_WORKFLOW);\r\n const current = parseManagedWorkflowSettings(workflowPath);\r\n const settings = await completeSettings({ ...options, provider }, current, action);\r\n\r\n if (action === \"install\" && fs.existsSync(workflowPath) && !options.yes) {\r\n const overwrite = await askChoice(`${path.relative(options.cwd, workflowPath)} already exists. Replace it`, [\"true\", \"false\"], \"false\");\r\n if (overwrite !== \"true\") return;\r\n }\r\n\r\n const files = writeManagedCi(options.cwd, settings);\r\n for (const filename of files) process.stdout.write(`${action === \"install\" ? \"Installed\" : action === \"config\" ? \"Updated\" : \"Upgraded\"} ${path.relative(options.cwd, filename)}\\n`);\r\n if (options.pr) openPullRequest(options.cwd, files, action === \"install\" ? \"install\" : \"upgrade\");\r\n}\r\n\r\nfunction diagnosticFingerprint(diagnostic: Diagnostic): string {\r\n return `${diagnostic.file}\\0${diagnostic.rule}\\0${diagnostic.severity}\\0${diagnostic.message}`;\r\n}\r\n\r\nfunction countDifference(left: Diagnostic[], right: Diagnostic[]): number {\r\n const counts = new Map<string, number>();\r\n for (const diagnostic of right) {\r\n const key = diagnosticFingerprint(diagnostic);\r\n counts.set(key, (counts.get(key) ?? 0) + 1);\r\n }\r\n let difference = 0;\r\n for (const diagnostic of left) {\r\n const key = diagnosticFingerprint(diagnostic);\r\n const remaining = counts.get(key) ?? 0;\r\n if (remaining > 0) counts.set(key, remaining - 1);\r\n else difference += 1;\r\n }\r\n return difference;\r\n}\r\n\r\nasync function fixedIssueCount(directory: string, base: string): Promise<number> {\r\n const plan = createGitScopePlan(directory, { scope: \"changed\", base });\r\n if (plan.currentFiles.length === 0 && plan.baselineFiles.length === 0) return 0;\r\n const config = loadConfigWithSource(directory).config;\r\n const selected = (file: { relativePath?: string }) => isSelectedLuauPath(file.relativePath ?? \"\", config);\r\n const current = await scanPath(directory, { files: plan.currentFiles.filter(selected), config, categories: config.categories });\r\n const baseline = await scanPath(directory, { files: plan.baselineFiles.filter(selected), config, categories: config.categories });\r\n return countDifference(baseline.diagnostics, current.diagnostics);\r\n}\r\n\r\nfunction resolveCiProjectRoots(directory: string, project: string): string[] {\r\n if (!project || project === \"*\") return [directory];\r\n return project.split(\",\").map((entry) => {\r\n const resolved = path.resolve(directory, entry.trim());\r\n if (!fs.existsSync(resolved) || !fs.statSync(resolved).isDirectory()) throw new Error(`Could not find project: ${entry}`);\r\n return resolved;\r\n });\r\n}\r\n\r\nasync function scanForCi(settings: CiSettings, eventName: string, base?: string, onFixed?: (count: number) => void): Promise<ScanReport> {\r\n const directory = path.resolve(process.cwd(), settings.directory);\r\n const isPullRequest = eventName === \"pull_request\";\r\n const scope: ScanScope = isPullRequest ? settings.scope : \"full\";\r\n const roots = resolveCiProjectRoots(directory, settings.project);\r\n const reports: Array<{ projectRoot: string; report: ScanReport }> = [];\r\n for (const projectRoot of roots) {\r\n const config = loadConfigWithSource(projectRoot).config;\r\n const report = await scanProjectWithScope(projectRoot, {\r\n scope,\r\n base,\r\n minSeverity: \"suggestion\",\r\n categories: config.categories,\r\n respectInlineDisables: config.respectInlineDisables ?? true,\r\n onDelta: onFixed ? (current, baseline) => onFixed(countDifference(baseline, current)) : undefined,\r\n });\r\n reports.push({ projectRoot, report });\r\n }\r\n return roots.length === 1 && roots[0] === directory ? reports[0].report : aggregateReports(directory, reports);\r\n}\r\n\r\ninterface ReviewChanges {\r\n diagnostics: Diagnostic[];\r\n base?: string;\r\n}\r\n\r\nasync function findNewReviewDiagnostics(\r\n settings: CiSettings,\r\n eventName: string,\r\n event: GitHubEvent,\r\n currentReport: ScanReport,\r\n): Promise<ReviewChanges> {\r\n if (event.action === \"synchronize\" && event.before) {\r\n const report = await scanForCi({ ...settings, scope: \"changed\" }, eventName, event.before);\r\n return { diagnostics: report.diagnostics, base: event.before };\r\n }\r\n if (event.action && event.action !== \"opened\") return { diagnostics: [] };\r\n return { diagnostics: currentReport.diagnostics };\r\n}\r\n\r\nfunction shouldBlock(report: ScanReport, level: BlockingLevel): boolean {\r\n if (level === \"none\") return false;\r\n if (level === \"warning\") return report.counts.error > 0 || report.counts.warning > 0;\r\n return report.counts.error > 0;\r\n}\r\n\r\nfunction affectedFiles(report: ScanReport): number {\r\n return new Set(report.diagnostics.map((diagnostic) => diagnostic.file)).size;\r\n}\r\n\r\nfunction writeOutput(name: string, value: string | number): void {\r\n const outputFile = process.env.GITHUB_OUTPUT;\r\n if (!outputFile) return;\r\n fs.appendFileSync(outputFile, `${name}=${value}\\n`);\r\n}\r\n\r\nfunction githubEvent(): GitHubEvent {\r\n const filename = process.env.GITHUB_EVENT_PATH;\r\n if (!filename || !fs.existsSync(filename)) return {};\r\n return JSON.parse(fs.readFileSync(filename, \"utf8\")) as GitHubEvent;\r\n}\r\n\r\nfunction githubRepo(event: GitHubEvent): string | null {\r\n return process.env.GITHUB_REPOSITORY ?? event.repository?.full_name ?? null;\r\n}\r\n\r\nfunction githubRunUrl(): string | null {\r\n const server = process.env.GITHUB_SERVER_URL;\r\n const repository = process.env.GITHUB_REPOSITORY;\r\n const runId = process.env.GITHUB_RUN_ID;\r\n return server && repository && runId ? `${server}/${repository}/actions/runs/${runId}` : null;\r\n}\r\n\r\nfunction wait(milliseconds: number): Promise<void> {\r\n return new Promise((resolve) => setTimeout(resolve, milliseconds));\r\n}\r\n\r\nfunction errorMessage(error: unknown): string {\r\n return error instanceof Error ? error.message : String(error);\r\n}\r\n\r\nfunction githubRetryDelay(response: Response, responseText: string, attempt: number): number | null {\r\n const remaining = response.headers.get(\"x-ratelimit-remaining\");\r\n const rateLimited = response.status === 429\r\n || (response.status === 403 && (remaining === \"0\" || /rate limit|rate_limit|abuse detection/i.test(responseText)))\r\n || (response.status === 200 && /\"errors\"\\s*:/.test(responseText) && /rate limit|rate_limit/i.test(responseText));\r\n if (!rateLimited) return null;\r\n\r\n const retryAfter = response.headers.get(\"retry-after\");\r\n if (retryAfter) {\r\n const seconds = Number(retryAfter);\r\n if (Number.isFinite(seconds) && seconds >= 0) return seconds * 1000;\r\n const date = Date.parse(retryAfter);\r\n if (Number.isFinite(date)) return Math.max(0, date - Date.now());\r\n }\r\n\r\n if (remaining === \"0\") {\r\n const reset = Number(response.headers.get(\"x-ratelimit-reset\"));\r\n if (Number.isFinite(reset)) return Math.max(0, reset * 1000 - Date.now() + 1000);\r\n }\r\n\r\n return 60_000 * (2 ** attempt);\r\n}\r\n\r\nasync function githubRequest<T>(url: string, options: { method?: string; body?: unknown } = {}): Promise<T> {\r\n const token = process.env.GITHUB_TOKEN;\r\n if (!token) throw new Error(\"GITHUB_TOKEN is unavailable\");\r\n for (let attempt = 0; ; attempt += 1) {\r\n const response = await fetch(url, {\r\n method: options.method ?? \"GET\",\r\n headers: {\r\n Accept: \"application/vnd.github+json\",\r\n Authorization: `Bearer ${token}`,\r\n \"X-GitHub-Api-Version\": \"2022-11-28\",\r\n \"User-Agent\": \"react-luau-doctor\",\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: options.body === undefined ? undefined : JSON.stringify(options.body),\r\n });\r\n const responseText = response.status === 204 ? \"\" : await response.text();\r\n const delay = githubRetryDelay(response, responseText, attempt);\r\n if (response.ok && delay === null) return responseText ? JSON.parse(responseText) as T : undefined as T;\r\n if (delay === null || attempt >= MAX_GITHUB_RETRIES || delay > MAX_RATE_LIMIT_WAIT_MS) {\r\n const retryDetail = delay !== null && delay > MAX_RATE_LIMIT_WAIT_MS\r\n ? ` Retry after ${Math.ceil(delay / 1000)} seconds.`\r\n : \"\";\r\n throw new Error(`GitHub API ${response.status}: ${responseText}${retryDetail}`);\r\n }\r\n process.stderr.write(`react-luau-doctor: GitHub API ${response.status}; retrying in ${Math.ceil(delay / 1000)} seconds\\n`);\r\n await wait(delay);\r\n }\r\n}\r\n\r\nasync function githubApi<T>(repo: string, endpoint: string, options: { method?: string; body?: unknown } = {}): Promise<T> {\r\n const apiBase = (process.env.GITHUB_API_URL ?? \"https://api.github.com\").replace(/\\/$/, \"\");\r\n return githubRequest<T>(`${apiBase}/repos/${repo}${endpoint}`, options);\r\n}\r\n\r\nfunction repoRelativeDiagnosticPath(directory: string, diagnosticFile: string): string {\r\n const absoluteDirectory = path.resolve(directory);\r\n const repoRoot = findGitRoot(absoluteDirectory);\r\n const prefix = path.relative(repoRoot, absoluteDirectory).split(path.sep).join(\"/\");\r\n return prefix && prefix !== \".\" ? path.posix.join(prefix, diagnosticFile) : diagnosticFile;\r\n}\r\n\r\nfunction githubFileUrl(repo: string, sha: string, diagnostic: Diagnostic, directory: string): string {\r\n const server = process.env.GITHUB_SERVER_URL ?? \"https://github.com\";\r\n const repoPath = repoRelativeDiagnosticPath(directory, diagnostic.file);\r\n const encoded = repoPath.split(\"/\").map(encodeURIComponent).join(\"/\");\r\n return `${server}/${repo}/blob/${sha}/${encoded}#L${diagnostic.location.line}`;\r\n}\r\n\r\nfunction renderSummaryComment(report: ScanReport, repo: string, sha: string, fixed: number, skipped: boolean, directory: string): string {\r\n if (skipped) {\r\n return `${SUMMARY_MARKER}\\n## React-Luau Doctor\\n\\nNo eligible React-Luau files changed in this pull request, so the scan was skipped.\\n`;\r\n }\r\n\r\n const lines = [\r\n SUMMARY_MARKER,\r\n \"## React-Luau Doctor\",\r\n \"\",\r\n `**${report.counts.error} errors · ${report.counts.warning} warnings · ${report.counts.suggestion} suggestions · Score ${report.score}/100**`,\r\n \"\",\r\n `${report.diagnostics.length} ${report.scope === \"changed\" ? \"introduced finding\" : \"reported finding\"}${report.diagnostics.length === 1 ? \"\" : \"s\"} · ${fixed} fixed`,\r\n ];\r\n\r\n const errors = report.diagnostics.filter((diagnostic) => diagnostic.severity === \"error\").slice(0, 20);\r\n if (errors.length > 0) {\r\n lines.push(\"\", \"### Errors\");\r\n for (const diagnostic of errors) {\r\n lines.push(`- [\\`${diagnostic.file}:${diagnostic.location.line}\\`](${githubFileUrl(repo, sha, diagnostic, directory)}) **${diagnostic.rule}**: ${diagnostic.message}`);\r\n }\r\n }\r\n\r\n const warningsByFile = new Map<string, Diagnostic[]>();\r\n for (const diagnostic of report.diagnostics.filter((entry) => entry.severity === \"warning\").slice(0, 50)) {\r\n const entries = warningsByFile.get(diagnostic.file) ?? [];\r\n entries.push(diagnostic);\r\n warningsByFile.set(diagnostic.file, entries);\r\n }\r\n if (warningsByFile.size > 0) {\r\n lines.push(\"\", \"### Warnings\");\r\n for (const [file, diagnostics] of warningsByFile) {\r\n lines.push(`- **${file}**`);\r\n for (const diagnostic of diagnostics) lines.push(` - [line ${diagnostic.location.line}](${githubFileUrl(repo, sha, diagnostic, directory)}): ${diagnostic.message}`);\r\n }\r\n }\r\n\r\n if (report.diagnostics.length > errors.length + [...warningsByFile.values()].reduce((sum, entries) => sum + entries.length, 0)) {\r\n lines.push(\"\", \"Additional findings are available in the workflow logs.\");\r\n }\r\n const runUrl = githubRunUrl();\r\n if (runUrl) lines.push(\"\", `[View full workflow run](${runUrl})`);\r\n lines.push(\"\", `<sub>Reviewed commit \\`${sha.slice(0, 7)}\\`</sub>`);\r\n return `${lines.join(\"\\n\")}\\n`;\r\n}\r\n\r\ninterface GitHubComment { id: number; body?: string; user?: { type?: string; login?: string } }\r\n\r\nasync function listComments(repo: string, endpoint: string): Promise<GitHubComment[]> {\r\n const comments: GitHubComment[] = [];\r\n for (let page = 1; ; page += 1) {\r\n const batch = await githubApi<GitHubComment[]>(repo, `${endpoint}?per_page=100&page=${page}`);\r\n comments.push(...batch);\r\n if (batch.length < 100) return comments;\r\n }\r\n}\r\n\r\nfunction isDoctorComment(comment: GitHubComment, marker: string): boolean {\r\n return comment.user?.type === \"Bot\" && comment.body?.startsWith(marker) === true;\r\n}\r\n\r\nasync function updateStickyComment(repo: string, pullNumber: number, body: string, createIfMissing = true): Promise<void> {\r\n const comments = await listComments(repo, `/issues/${pullNumber}/comments`);\r\n const previous = comments.find((comment) => isDoctorComment(comment, SUMMARY_MARKER));\r\n if (previous) await githubApi(repo, `/issues/comments/${previous.id}`, { method: \"PATCH\", body: { body } });\r\n else if (createIfMissing) await githubApi(repo, `/issues/${pullNumber}/comments`, { method: \"POST\", body: { body } });\r\n}\r\n\r\nfunction changedLineMap(directory: string, base: string): Map<string, LineRange[]> {\r\n return createGitScopePlan(directory, { scope: \"lines\", base }).changedLines;\r\n}\r\n\r\nfunction touchesChangedLine(diagnostic: Diagnostic, ranges: LineRange[]): boolean {\r\n return ranges.some((range) => diagnostic.location.line >= range.start && diagnostic.location.line <= range.end);\r\n}\r\n\r\nfunction reviewFingerprint(pathname: string, rule: string, severity: string, message: string): string {\r\n // Line numbers move as a PR changes. Keep the original thread when the finding itself is unchanged.\r\n return createHash(\"sha256\").update(`${pathname}\\0${rule}\\0${severity}\\0${message}`).digest(\"hex\").slice(0, 32);\r\n}\r\n\r\nfunction diagnosticReviewFingerprint(directory: string, diagnostic: Diagnostic): string {\r\n return reviewFingerprint(\r\n repoRelativeDiagnosticPath(directory, diagnostic.file),\r\n diagnostic.rule,\r\n diagnostic.severity,\r\n diagnostic.message,\r\n );\r\n}\r\n\r\nfunction fingerprintFromReviewBody(body: string, pathname: string): string | null {\r\n const marker = body.match(/<!-- react-luau-doctor:fingerprint:([a-f0-9]{32}) -->/i);\r\n if (marker) return marker[1].toLowerCase();\r\n\r\n const legacy = body.match(/\\*\\*React-Luau Doctor\\*\\* · `([^`]+)` \\((error|warning|suggestion)\\)\\n\\n([^\\n]+)/);\r\n return legacy ? reviewFingerprint(pathname, legacy[1], legacy[2], legacy[3]) : null;\r\n}\r\n\r\nfunction reviewCommentBody(directory: string, diagnostic: Diagnostic): string {\r\n const fingerprint = diagnosticReviewFingerprint(directory, diagnostic);\r\n return `${REVIEW_MARKER}\\n<!-- react-luau-doctor:fingerprint:${fingerprint} -->\\n**React-Luau Doctor** · \\`${diagnostic.rule}\\` (${diagnostic.severity})\\n\\n${diagnostic.message}${diagnostic.help ? `\\n\\n${diagnostic.help}` : \"\"}`;\r\n}\r\n\r\ninterface GitHubReviewComment {\r\n id: number;\r\n pull_request_review_id: number;\r\n path: string;\r\n position: number | null;\r\n body: string;\r\n user: { type?: string } | null;\r\n}\r\n\r\ninterface GitHubReview {\r\n id: number;\r\n body: string | null;\r\n user: { type?: string } | null;\r\n}\r\n\r\nconst ARCHIVED_REVIEW_BODY = \"✅ React-Luau Doctor: findings from this review are no longer current. Active findings, if any, are shown in newer reviews.\";\r\n\r\nasync function listReviewComments(repo: string, pullNumber: number): Promise<GitHubReviewComment[]> {\r\n const comments: GitHubReviewComment[] = [];\r\n for (let page = 1; ; page += 1) {\r\n const batch = await githubApi<GitHubReviewComment[]>(repo, `/pulls/${pullNumber}/comments?per_page=100&page=${page}`);\r\n comments.push(...batch);\r\n if (batch.length < 100) return comments;\r\n }\r\n}\r\n\r\nasync function listReviews(repo: string, pullNumber: number): Promise<GitHubReview[]> {\r\n const reviews: GitHubReview[] = [];\r\n for (let page = 1; ; page += 1) {\r\n const batch = await githubApi<GitHubReview[]>(repo, `/pulls/${pullNumber}/reviews?per_page=100&page=${page}`);\r\n reviews.push(...batch);\r\n if (batch.length < 100) return reviews;\r\n }\r\n}\r\n\r\nfunction isDoctorReview(review: GitHubReview): boolean {\r\n return review.user?.type === \"Bot\" && (review.body?.includes(\"React-Luau Doctor\") ?? false);\r\n}\r\n\r\nfunction doctorReviewCommentFingerprint(comment: GitHubReviewComment): string | null {\r\n if (comment.user?.type !== \"Bot\" || !comment.body.startsWith(REVIEW_MARKER)) return null;\r\n return fingerprintFromReviewBody(comment.body, comment.path);\r\n}\r\n\r\nfunction takeCount(counts: Map<string, number>, key: string): boolean {\r\n const count = counts.get(key) ?? 0;\r\n if (count === 0) return false;\r\n counts.set(key, count - 1);\r\n return true;\r\n}\r\n\r\nfunction incrementCount(counts: Map<string, number>, key: string): void {\r\n counts.set(key, (counts.get(key) ?? 0) + 1);\r\n}\r\n\r\nasync function manageReviewComments(\r\n repo: string,\r\n pullNumber: number,\r\n currentReport: ScanReport,\r\n newDiagnostics: Diagnostic[],\r\n directory: string,\r\n newBase: string,\r\n pullBase: string,\r\n): Promise<void> {\r\n const [allReviewComments, reviews] = await Promise.all([\r\n listReviewComments(repo, pullNumber),\r\n listReviews(repo, pullNumber),\r\n ]);\r\n const reviewComments = allReviewComments\r\n .map((comment) => ({ comment, fingerprint: doctorReviewCommentFingerprint(comment) }))\r\n .filter((entry): entry is { comment: GitHubReviewComment; fingerprint: string } => entry.fingerprint !== null);\r\n\r\n const activeCounts = new Map<string, number>();\r\n for (const diagnostic of currentReport.diagnostics) incrementCount(activeCounts, diagnosticReviewFingerprint(directory, diagnostic));\r\n\r\n const newCounts = new Map<string, number>();\r\n for (const diagnostic of newDiagnostics) incrementCount(newCounts, diagnosticReviewFingerprint(directory, diagnostic));\r\n\r\n interface StaleComment {\r\n comment: GitHubReviewComment;\r\n fingerprint: string;\r\n needsReplacement: boolean;\r\n }\r\n\r\n const replacementCounts = new Map<string, number>();\r\n const staleComments: StaleComment[] = [];\r\n\r\n // Prefer live comments when duplicate fingerprints exist. Outdated comments\r\n // have position=null in GitHub's REST API and should never suppress a current\r\n // inline comment for the same finding.\r\n const orderedComments = reviewComments.slice().sort((left, right) =>\r\n Number(left.comment.position === null) - Number(right.comment.position === null));\r\n\r\n for (const { comment, fingerprint } of orderedComments) {\r\n if (comment.position !== null && takeCount(activeCounts, fingerprint)) {\r\n // A live existing comment represents this finding. Consume the introduced\r\n // occurrence too so workflow reruns do not create duplicates.\r\n takeCount(newCounts, fingerprint);\r\n continue;\r\n }\r\n\r\n const needsReplacement = takeCount(activeCounts, fingerprint);\r\n if (needsReplacement) {\r\n incrementCount(replacementCounts, fingerprint);\r\n // Replacing an outdated comment also satisfies a newly introduced copy of\r\n // the same finding, if this push reintroduced it.\r\n takeCount(newCounts, fingerprint);\r\n }\r\n staleComments.push({ comment, fingerprint, needsReplacement });\r\n }\r\n\r\n const newLineMap = newCounts.size > 0 || (newBase === pullBase && replacementCounts.size > 0)\r\n ? changedLineMap(directory, newBase)\r\n : new Map<string, LineRange[]>();\r\n const pullLineMap = newBase === pullBase\r\n ? newLineMap\r\n : replacementCounts.size > 0\r\n ? changedLineMap(directory, pullBase)\r\n : new Map<string, LineRange[]>();\r\n const candidates: Array<{ diagnostic: Diagnostic; replacement: boolean }> = [];\r\n\r\n for (const diagnostic of newDiagnostics) {\r\n if (!touchesChangedLine(diagnostic, newLineMap.get(diagnostic.file) ?? [])) continue;\r\n const fingerprint = diagnosticReviewFingerprint(directory, diagnostic);\r\n if (!takeCount(newCounts, fingerprint)) continue;\r\n candidates.push({ diagnostic, replacement: false });\r\n }\r\n\r\n for (const diagnostic of currentReport.diagnostics) {\r\n if (!touchesChangedLine(diagnostic, pullLineMap.get(diagnostic.file) ?? [])) continue;\r\n const fingerprint = diagnosticReviewFingerprint(directory, diagnostic);\r\n if (!takeCount(replacementCounts, fingerprint)) continue;\r\n candidates.push({ diagnostic, replacement: true });\r\n }\r\n\r\n const selected = candidates.slice(0, MAX_REVIEW_COMMENTS);\r\n const comments = selected.map(({ diagnostic }) => ({\r\n path: repoRelativeDiagnosticPath(directory, diagnostic.file),\r\n line: diagnostic.location.line,\r\n side: \"RIGHT\",\r\n body: reviewCommentBody(directory, diagnostic),\r\n }));\r\n\r\n const failures: string[] = [];\r\n let postedNewComments = true;\r\n if (comments.length > 0) {\r\n try {\r\n await githubApi(repo, `/pulls/${pullNumber}/reviews`, {\r\n method: \"POST\",\r\n body: { event: \"COMMENT\", body: \"React-Luau Doctor found new issues\", comments },\r\n });\r\n } catch (error) {\r\n postedNewComments = false;\r\n failures.push(`could not create new review comments: ${errorMessage(error)}`);\r\n }\r\n }\r\n\r\n // Do not remove old feedback if a replacement review failed to post. Fixed\r\n // findings can be deleted immediately when there was nothing new to publish.\r\n if (postedNewComments) {\r\n const postedReplacementCounts = new Map<string, number>();\r\n for (const candidate of selected) {\r\n if (candidate.replacement) incrementCount(postedReplacementCounts, diagnosticReviewFingerprint(directory, candidate.diagnostic));\r\n }\r\n\r\n const remainingByReview = new Map<number, number>();\r\n for (const { comment } of reviewComments) {\r\n remainingByReview.set(comment.pull_request_review_id, (remainingByReview.get(comment.pull_request_review_id) ?? 0) + 1);\r\n }\r\n for (const stale of staleComments) {\r\n if (stale.needsReplacement && !takeCount(postedReplacementCounts, stale.fingerprint)) continue;\r\n try {\r\n await githubApi<void>(repo, `/pulls/comments/${stale.comment.id}`, { method: \"DELETE\" });\r\n const reviewId = stale.comment.pull_request_review_id;\r\n const remaining = Math.max(0, (remainingByReview.get(reviewId) ?? 1) - 1);\r\n remainingByReview.set(reviewId, remaining);\r\n } catch (error) {\r\n failures.push(`could not delete stale review comment ${stale.comment.id}: ${errorMessage(error)}`);\r\n }\r\n }\r\n\r\n // Submitted reviews themselves cannot be deleted. Rewrite any old Doctor\r\n // review that no longer has Doctor comments so the PR timeline does not\r\n // accumulate blank review cards. This also cleans up blank reviews created\r\n // by older Doctor versions on the next run.\r\n for (const review of reviews) {\r\n if (!isDoctorReview(review) || review.body === ARCHIVED_REVIEW_BODY) continue;\r\n if ((remainingByReview.get(review.id) ?? 0) > 0) continue;\r\n try {\r\n await githubApi(repo, `/pulls/${pullNumber}/reviews/${review.id}`, {\r\n method: \"PUT\",\r\n body: { body: ARCHIVED_REVIEW_BODY },\r\n });\r\n } catch (error) {\r\n failures.push(`could not archive empty review ${review.id}: ${errorMessage(error)}`);\r\n }\r\n }\r\n }\r\n\r\n if (failures.length > 0) throw new Error(failures.join(\"; \"));\r\n}\r\n\r\nasync function publishCommitStatus(repo: string, sha: string, report: ScanReport, blocking: BlockingLevel): Promise<void> {\r\n const blocked = shouldBlock(report, blocking);\r\n await githubApi(repo, `/statuses/${sha}`, {\r\n method: \"POST\",\r\n body: {\r\n state: blocked ? \"failure\" : \"success\",\r\n context: \"React-Luau Doctor\",\r\n description: `Score ${report.score}/100 · ${report.counts.error} errors · ${report.counts.warning} warnings`,\r\n target_url: githubRunUrl() ?? undefined,\r\n },\r\n });\r\n}\r\n\r\ninterface CiRunOptions extends CiSettings {}\r\n\r\nfunction parseCiRunOptions(argv: string[]): CiRunOptions {\r\n const settings = { ...DEFAULT_SETTINGS };\r\n for (let index = 0; index < argv.length; index += 1) {\r\n const arg = argv[index];\r\n if (arg === \"--directory\") {\r\n const parsed = nextValue(argv, index, arg);\r\n settings.directory = parsed.value;\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--project\") {\r\n const parsed = nextValue(argv, index, arg);\r\n settings.project = parsed.value;\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--blocking\") {\r\n const parsed = nextValue(argv, index, arg);\r\n settings.blocking = parseBlocking(parsed.value);\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--scope\") {\r\n const parsed = nextValue(argv, index, arg);\r\n settings.scope = parseScope(parsed.value);\r\n index = parsed.nextIndex;\r\n } else if (arg === \"--comment\") settings.comment = true;\r\n else if (arg === \"--no-comment\") settings.comment = false;\r\n else if (arg === \"--review-comments\") settings.reviewComments = true;\r\n else if (arg === \"--no-review-comments\") settings.reviewComments = false;\r\n else if (arg === \"--commit-status\") settings.commitStatus = true;\r\n else if (arg === \"--no-commit-status\") settings.commitStatus = false;\r\n else throw new Error(`Unknown ci run option: ${arg}`);\r\n }\r\n return settings;\r\n}\r\n\r\nasync function runCiJob(argv: string[]): Promise<void> {\r\n const settings = parseCiRunOptions(argv);\r\n const eventName = process.env.GITHUB_EVENT_NAME ?? \"\";\r\n const event = githubEvent();\r\n const isPullRequest = eventName === \"pull_request\" && event.pull_request !== undefined;\r\n const base = isPullRequest ? event.pull_request!.base.sha : undefined;\r\n const head = isPullRequest ? event.pull_request!.head.sha : process.env.GITHUB_SHA ?? \"HEAD\";\r\n let fixedFromScan: number | undefined;\r\n const report = await scanForCi(settings, eventName, base, (count) => {\r\n fixedFromScan = (fixedFromScan ?? 0) + count;\r\n });\r\n const reviewChanges: ReviewChanges = isPullRequest\r\n ? await findNewReviewDiagnostics(settings, eventName, event, report)\r\n : { diagnostics: [] };\r\n const fixed = isPullRequest && base\r\n ? (fixedFromScan ?? (await Promise.all(resolveCiProjectRoots(path.resolve(settings.directory), settings.project).map(root => fixedIssueCount(root, base)))).reduce((sum, count) => sum + count, 0))\r\n : 0;\r\n const skipped = isPullRequest && report.scannedFiles === 0 && fixed === 0;\r\n const effectiveBlocking = isPullRequest ? settings.blocking : \"none\";\r\n\r\n process.stdout.write(`${renderTextReport(report, true, false, false, process.stdout.columns ?? 120)}\\n`);\r\n const annotations = renderAnnotations(report);\r\n if (annotations) process.stdout.write(`${annotations}\\n`);\r\n\r\n writeOutput(\"score\", report.score);\r\n writeOutput(\"total-issues\", report.diagnostics.length);\r\n writeOutput(\"fixed-issues\", fixed);\r\n writeOutput(\"error-count\", report.counts.error);\r\n writeOutput(\"warning-count\", report.counts.warning);\r\n writeOutput(\"affected-files\", affectedFiles(report));\r\n\r\n const repo = githubRepo(event);\r\n if (repo && isPullRequest) {\r\n const pullNumber = event.pull_request!.number;\r\n if (settings.comment) {\r\n try {\r\n await updateStickyComment(repo, pullNumber, renderSummaryComment(report, repo, head, fixed, skipped, settings.directory), !skipped);\r\n } catch (error) {\r\n process.stderr.write(`react-luau-doctor: could not update the sticky PR comment: ${errorMessage(error)}\\n`);\r\n }\r\n }\r\n if (settings.reviewComments && base) {\r\n try {\r\n await manageReviewComments(\r\n repo,\r\n pullNumber,\r\n report,\r\n reviewChanges.diagnostics,\r\n path.resolve(settings.directory),\r\n reviewChanges.base ?? base,\r\n base,\r\n );\r\n } catch (error) {\r\n process.stderr.write(`react-luau-doctor: could not update inline review comments: ${errorMessage(error)}\\n`);\r\n }\r\n }\r\n }\r\n\r\n if (repo && settings.commitStatus) {\r\n try {\r\n await publishCommitStatus(repo, head, report, effectiveBlocking);\r\n } catch (error) {\r\n process.stderr.write(`react-luau-doctor: could not publish the commit status: ${errorMessage(error)}\\n`);\r\n }\r\n }\r\n\r\n if (shouldBlock(report, effectiveBlocking)) process.exitCode = 1;\r\n}\r\n\r\nexport async function runCiCommand(argv: string[]): Promise<void> {\r\n const action = argv[0];\r\n if (action === \"install\" || action === \"config\" || action === \"upgrade\") {\r\n await runCiManage(action, argv.slice(1));\r\n return;\r\n }\r\n if (action === \"run\") {\r\n await runCiJob(argv.slice(1));\r\n return;\r\n }\r\n throw new Error(\"ci requires install, config, or upgrade\");\r\n}\r\n",
43
+ "import { spawnSync } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport os from \"node:os\";\nimport readline from \"node:readline/promises\";\nimport { stdin as input, stdout as output } from \"node:process\";\nimport { isSelectedLuauPath } from \"../files\";\nimport { loadConfigWithSource } from \"../config\";\nimport { createGitScopePlan, findGitRoot, gitExecutable } from \"../git\";\nimport { renderAnnotations, renderTextReport } from \"../reporter\";\nimport { diagnosticDifference, renderSummaryComment, type FixedDiagnostic } from \"./report\";\nimport {\n GitHubClient,\n StalePublication,\n readReviewState,\n reconcileReviews,\n reviewSnapshot,\n type ReviewAnalysis,\n type ReviewFinding,\n type ReviewSnapshot,\n} from \"./github\";\nimport { aggregateReports, scanProjectWithScope, type ScopedScanOptions } from \"../scope\";\nimport { scanPath } from \"../scanner\";\nimport type { BlockingLevel, Diagnostic, ScanReport, ScanScope } from \"../types\";\nimport packageJson from \"../../package.json\";\n\nexport type CiProvider = \"github\" | \"gitlab\";\n\ninterface CiSettings {\n provider: CiProvider;\n blocking: BlockingLevel;\n scope: ScanScope;\n comment: boolean;\n reviewComments: boolean;\n commitStatus: boolean;\n directory: string;\n project: string;\n}\n\ninterface CiManageOptions extends Partial<CiSettings> {\n cwd: string;\n yes: boolean;\n pr: boolean;\n}\n\ninterface GitHubEvent {\n action?: string;\n before?: string;\n pull_request?: {\n number: number;\n base: { sha: string; ref: string };\n head: { sha: string; ref: string };\n };\n repository?: { full_name?: string };\n}\n\nconst DEFAULT_SETTINGS: CiSettings = {\n provider: \"github\",\n blocking: \"none\",\n scope: \"changed\",\n comment: true,\n reviewComments: true,\n commitStatus: true,\n directory: \".\",\n project: \"*\",\n};\n\nconst GITHUB_WORKFLOW = path.join(\".github\", \"workflows\", \"react-luau-doctor.yml\");\nconst GITLAB_WORKFLOW = \".gitlab-ci.yml\";\nconst PACKAGE_SPEC = `${packageJson.name}@${packageJson.version}`;\nfunction yamlString(value: string): string {\n return JSON.stringify(value);\n}\n\nexport function renderGitHubWorkflow(settings: CiSettings): string {\n return `name: React-Luau Doctor\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review]\n push:\n branches: [main]\n\npermissions:\n contents: read\n pull-requests: write\n statuses: write\n\nconcurrency:\n group: react-luau-doctor-\\${{ github.event.pull_request.number || github.ref }}\n cancel-in-progress: true\n\njobs:\n react-luau-doctor:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v5\n with:\n fetch-depth: 0\n ref: \\${{ github.event.pull_request.head.sha || github.sha }}\n persist-credentials: false\n - uses: oven-sh/setup-bun@v2\n with:\n bun-version: \"1.4.0\"\n - id: doctor\n env:\n GITHUB_TOKEN: \\${{ github.token }}\n DOCTOR_DIRECTORY: ${yamlString(settings.directory)}\n DOCTOR_PROJECT: ${yamlString(settings.project)}\n DOCTOR_BLOCKING: ${settings.blocking}\n DOCTOR_SCOPE: ${settings.scope}\n run: >-\n bunx --bun ${PACKAGE_SPEC} ci run\n --directory \"$DOCTOR_DIRECTORY\"\n --project \"$DOCTOR_PROJECT\"\n --blocking \"$DOCTOR_BLOCKING\"\n --scope \"$DOCTOR_SCOPE\"\n ${settings.comment ? \"--comment\" : \"--no-comment\"}\n ${settings.reviewComments ? \"--review-comments\" : \"--no-review-comments\"}\n ${settings.commitStatus ? \"--commit-status\" : \"--no-commit-status\"}\n - name: Upload full Doctor report\n if: always() && steps.doctor.outputs.report-path != ''\n uses: actions/upload-artifact@v4\n with:\n name: react-luau-doctor-report\n path: \\${{ steps.doctor.outputs.report-path }}\n`;\n}\n\nexport function renderGitLabWorkflow(settings: CiSettings): string {\n return `stages:\n - test\n\nreact-luau-doctor:\n stage: test\n image: oven/bun:1.4.0\n variables:\n GIT_DEPTH: \"0\"\n DOCTOR_DIRECTORY: ${yamlString(settings.directory)}\n DOCTOR_SCOPE: ${yamlString(settings.scope)}\n DOCTOR_BLOCKING: ${yamlString(settings.blocking)}\n before_script:\n - apt-get update -qq && apt-get install -y --no-install-recommends git\n script:\n - 'bunx --bun ${PACKAGE_SPEC} \"$DOCTOR_DIRECTORY\" --scope \"$DOCTOR_SCOPE\" --blocking \"$DOCTOR_BLOCKING\" --no-color'\n`;\n}\n\nfunction parseBoolean(value: string, name: string): boolean {\n if (value === \"true\") return true;\n\n if (value === \"false\") return false;\n\n throw new Error(`${name} must be true or false`);\n}\n\nfunction parseBlocking(value: string): BlockingLevel {\n if (value !== \"error\" && value !== \"warning\" && value !== \"none\") {\n throw new Error(\"--blocking must be error, warning, or none\");\n }\n\n return value;\n}\n\nfunction parseScope(value: string): ScanScope {\n if (value !== \"full\" && value !== \"files\" && value !== \"changed\" && value !== \"lines\") {\n throw new Error(\"--scope must be full, files, changed, or lines\");\n }\n\n return value;\n}\n\nfunction parseProvider(value: string): CiProvider {\n if (value !== \"github\" && value !== \"gitlab\") {\n throw new Error(\"--provider must be github or gitlab\");\n }\n\n return value;\n}\n\nfunction nextValue(\n argv: string[],\n index: number,\n flag: string,\n): { value: string; nextIndex: number } {\n const value = argv[index + 1];\n\n if (!value || value.startsWith(\"--\")) throw new Error(`${flag} requires a value`);\n\n return { value, nextIndex: index + 1 };\n}\n\nfunction parseCiManageOptions(\n argv: string[],\n action: \"install\" | \"config\" | \"upgrade\",\n): CiManageOptions {\n const options: CiManageOptions = { cwd: process.cwd(), yes: false, pr: false };\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n\n if (arg === \"--yes\" || arg === \"-y\") options.yes = true;\n else if (arg === \"--pr\") {\n if (action === \"config\") throw new Error(\"ci config does not accept --pr\");\n\n options.pr = true;\n } else if (arg === \"--cwd\") {\n const parsed = nextValue(argv, index, arg);\n options.cwd = path.resolve(parsed.value);\n index = parsed.nextIndex;\n } else if (arg === \"--provider\") {\n const parsed = nextValue(argv, index, arg);\n options.provider = parseProvider(parsed.value);\n index = parsed.nextIndex;\n } else if (arg === \"--blocking\") {\n const parsed = nextValue(argv, index, arg);\n options.blocking = parseBlocking(parsed.value);\n index = parsed.nextIndex;\n } else if (arg === \"--scope\") {\n const parsed = nextValue(argv, index, arg);\n options.scope = parseScope(parsed.value);\n index = parsed.nextIndex;\n } else if (arg === \"--comment\") options.comment = true;\n else if (arg === \"--no-comment\") options.comment = false;\n else if (arg === \"--review-comments\") options.reviewComments = true;\n else if (arg === \"--no-review-comments\") options.reviewComments = false;\n else if (arg === \"--commit-status\") options.commitStatus = true;\n else if (arg === \"--no-commit-status\") options.commitStatus = false;\n else throw new Error(`Unknown ci ${action} option: ${arg}`);\n }\n\n return options;\n}\n\nfunction parseManagedWorkflowSettings(filename: string): Partial<CiSettings> {\n if (!fs.existsSync(filename)) return {};\n\n const text = fs.readFileSync(filename, \"utf8\");\n const match = (name: string): string | undefined =>\n text.match(new RegExp(`^\\\\s*${name}:\\\\s*(.+?)\\\\s*$`, \"m\"))?.[1]?.replace(/^['\"]|['\"]$/g, \"\");\n const result: Partial<CiSettings> = {\n provider: filename.endsWith(\".gitlab-ci.yml\") ? \"gitlab\" : \"github\",\n };\n const blocking = match(\"DOCTOR_BLOCKING\") ?? match(\"blocking\");\n const scope = match(\"DOCTOR_SCOPE\") ?? match(\"scope\");\n const project = match(\"DOCTOR_PROJECT\") ?? match(\"project\");\n const directory = match(\"DOCTOR_DIRECTORY\") ?? match(\"directory\");\n const flag = (enabled: string, disabled: string): boolean | undefined => {\n if (text.includes(disabled)) return false;\n\n if (text.includes(enabled)) return true;\n\n return undefined;\n };\n const comment = match(\"comment\") ?? flag(\"--comment\", \"--no-comment\")?.toString();\n const reviewComments =\n match(\"review-comments\") ?? flag(\"--review-comments\", \"--no-review-comments\")?.toString();\n const commitStatus =\n match(\"commit-status\") ?? flag(\"--commit-status\", \"--no-commit-status\")?.toString();\n\n if (blocking) result.blocking = parseBlocking(blocking);\n\n if (scope) result.scope = parseScope(scope);\n\n if (comment) result.comment = parseBoolean(comment, \"comment\");\n\n if (reviewComments) result.reviewComments = parseBoolean(reviewComments, \"review-comments\");\n\n if (commitStatus) result.commitStatus = parseBoolean(commitStatus, \"commit-status\");\n\n if (project) result.project = project;\n\n if (directory) result.directory = directory;\n\n return result;\n}\n\nfunction existingProvider(cwd: string): CiProvider | null {\n if (fs.existsSync(path.join(cwd, GITHUB_WORKFLOW))) return \"github\";\n\n if (fs.existsSync(path.join(cwd, GITLAB_WORKFLOW))) return \"gitlab\";\n\n return null;\n}\n\nasync function askChoice(question: string, choices: string[], fallback: string): Promise<string> {\n const rl = readline.createInterface({ input, output });\n\n try {\n const answer = (await rl.question(`${question} (${choices.join(\"/\")}) [${fallback}]: `)).trim();\n\n return answer || fallback;\n } finally {\n rl.close();\n }\n}\n\nasync function completeSettings(\n options: CiManageOptions,\n current: Partial<CiSettings>,\n action: \"install\" | \"config\" | \"upgrade\",\n): Promise<CiSettings> {\n const settings: CiSettings = { ...DEFAULT_SETTINGS, ...current, ...options };\n\n if (options.yes || action === \"upgrade\") return settings;\n\n settings.provider = parseProvider(\n await askChoice(\"CI provider\", [\"github\", \"gitlab\"], settings.provider),\n );\n settings.blocking = parseBlocking(\n await askChoice(\"Blocking level\", [\"none\", \"error\", \"warning\"], settings.blocking),\n );\n settings.scope = parseScope(\n await askChoice(\n \"Pull request scan scope\",\n [\"changed\", \"files\", \"lines\", \"full\"],\n settings.scope,\n ),\n );\n\n if (settings.provider === \"github\") {\n settings.comment = parseBoolean(\n await askChoice(\"Sticky PR summary comment\", [\"true\", \"false\"], String(settings.comment)),\n \"comment\",\n );\n settings.reviewComments = parseBoolean(\n await askChoice(\"Inline review comments\", [\"true\", \"false\"], String(settings.reviewComments)),\n \"review-comments\",\n );\n settings.commitStatus = parseBoolean(\n await askChoice(\"Commit status\", [\"true\", \"false\"], String(settings.commitStatus)),\n \"commit-status\",\n );\n }\n\n return settings;\n}\n\nfunction writeManagedCi(cwd: string, settings: CiSettings): string[] {\n if (settings.provider === \"github\") {\n const workflow = path.join(cwd, GITHUB_WORKFLOW);\n fs.mkdirSync(path.dirname(workflow), { recursive: true });\n fs.writeFileSync(workflow, renderGitHubWorkflow(settings));\n\n return [workflow];\n }\n\n const workflow = path.join(cwd, GITLAB_WORKFLOW);\n\n if (fs.existsSync(workflow) && !fs.readFileSync(workflow, \"utf8\").includes(\"react-luau-doctor\")) {\n throw new Error(\n \".gitlab-ci.yml already exists and is not managed by React-Luau Doctor; add the generated job manually instead of overwriting it\",\n );\n }\n\n fs.writeFileSync(workflow, renderGitLabWorkflow(settings));\n\n return [workflow];\n}\n\nfunction runCommand(cwd: string, command: string, args: string[], allowFailure = false): string {\n const result = spawnSync(command, args, { cwd, encoding: \"utf8\", windowsHide: true });\n\n if (result.error) {\n if (allowFailure) return \"\";\n\n throw new Error(`${command} failed: ${result.error.message}`);\n }\n\n if ((result.status ?? 1) !== 0) {\n if (allowFailure) return \"\";\n\n throw new Error(\n `${command} ${args.join(\" \")} failed: ${(result.stderr || result.stdout || \"unknown error\").trim()}`,\n );\n }\n\n return (result.stdout ?? \"\").trim();\n}\n\nfunction openPullRequest(cwd: string, files: string[], action: \"install\" | \"upgrade\"): void {\n findGitRoot(cwd);\n\n if (!runCommand(cwd, \"gh\", [\"--version\"], true)) {\n throw new Error(\"--pr requires the GitHub CLI (gh) to be installed and authenticated\");\n }\n\n const branch =\n action === \"install\" ? \"chore/add-react-luau-doctor-ci\" : \"chore/upgrade-react-luau-doctor-ci\";\n const title = action === \"install\" ? \"Add React-Luau Doctor CI\" : \"Upgrade React-Luau Doctor CI\";\n runCommand(cwd, \"git\", [\"switch\", \"-c\", branch]);\n runCommand(cwd, \"git\", [\"add\", \"--\", ...files.map((file) => path.relative(cwd, file))]);\n runCommand(cwd, \"git\", [\"commit\", \"-m\", title]);\n runCommand(cwd, \"git\", [\"push\", \"-u\", \"origin\", branch]);\n const url = runCommand(cwd, \"gh\", [\n \"pr\",\n \"create\",\n \"--title\",\n title,\n \"--body\",\n \"Adds React-Luau Doctor pull request analysis.\",\n ]);\n process.stdout.write(`${url}\\n`);\n}\n\nasync function runCiManage(\n action: \"install\" | \"config\" | \"upgrade\",\n argv: string[],\n): Promise<void> {\n const options = parseCiManageOptions(argv, action);\n const provider = options.provider ?? existingProvider(options.cwd) ?? DEFAULT_SETTINGS.provider;\n const workflowPath = path.join(\n options.cwd,\n provider === \"github\" ? GITHUB_WORKFLOW : GITLAB_WORKFLOW,\n );\n const current = parseManagedWorkflowSettings(workflowPath);\n const settings = await completeSettings({ ...options, provider }, current, action);\n\n if (action === \"install\" && fs.existsSync(workflowPath) && !options.yes) {\n const overwrite = await askChoice(\n `${path.relative(options.cwd, workflowPath)} already exists. Replace it`,\n [\"true\", \"false\"],\n \"false\",\n );\n\n if (overwrite !== \"true\") return;\n }\n\n const files = writeManagedCi(options.cwd, settings);\n\n for (const filename of files) {\n process.stdout.write(\n `${action === \"install\" ? \"Installed\" : action === \"config\" ? \"Updated\" : \"Upgraded\"} ${path.relative(options.cwd, filename)}\\n`,\n );\n }\n\n if (options.pr) openPullRequest(options.cwd, files, action === \"install\" ? \"install\" : \"upgrade\");\n}\n\nfunction resolveCiProjectRoots(directory: string, project: string): string[] {\n if (!project || project === \"*\") return [directory];\n\n return project.split(\",\").map((entry) => {\n const resolved = path.resolve(directory, entry.trim());\n\n if (!fs.existsSync(resolved) || !fs.statSync(resolved).isDirectory()) {\n throw new Error(`Could not find project: ${entry}`);\n }\n\n return resolved;\n });\n}\n\nfunction gitResult(directory: string, args: string[]): string | null {\n const result = spawnSync(gitExecutable, args, {\n cwd: directory,\n encoding: \"utf8\",\n windowsHide: true,\n maxBuffer: 64 * 1024 * 1024,\n });\n\n return result.status === 0 ? result.stdout : null;\n}\n\nfunction renameResolver(directory: string, head: string): ReviewAnalysis[\"canonicalFile\"] {\n const cache = new Map<string, Map<string, string> | null>();\n\n return (file, commit) => {\n if (!commit) return file;\n\n if (!cache.has(commit)) {\n const diff = gitResult(directory, [\n \"diff\",\n \"--name-status\",\n \"-z\",\n \"--find-renames\",\n commit,\n head,\n ]);\n const renames = new Map<string, string>();\n\n if (diff !== null) {\n const fields = diff.split(\"\\0\");\n\n for (let i = 0; i < fields.length && fields[i]; ) {\n const status = fields[i++];\n const oldPath = fields[i++];\n\n if (/^[RC]/.test(status)) {\n const newPath = fields[i++];\n\n if (status.startsWith(\"R\")) renames.set(oldPath, newPath);\n }\n }\n }\n\n cache.set(commit, diff === null ? null : renames);\n }\n\n const renames = cache.get(commit);\n\n return renames ? (renames.get(file) ?? file) : null;\n };\n}\n\ninterface CiScan {\n repoRoot: string;\n report: ScanReport;\n comparison: ScanReport;\n fixed: FixedDiagnostic[];\n analysis: ReviewAnalysis;\n}\n\nasync function scanForCi(\n settings: CiSettings,\n isPullRequest: boolean,\n base: string | undefined,\n head: string,\n snapshot?: ReviewSnapshot,\n): Promise<CiScan> {\n const directory = path.resolve(settings.directory);\n const repoRoot = isPullRequest ? findGitRoot(directory) : directory;\n const roots = resolveCiProjectRoots(directory, settings.project);\n const canonicalFile = renameResolver(repoRoot, head);\n const historicalFiles = new Set<string>();\n\n for (const review of snapshot?.reviews ?? []) {\n const state = readReviewState(review.body ?? \"\");\n\n if (!state) continue;\n\n for (const finding of state.findings) {\n const file = canonicalFile(finding.file, state.commit);\n\n if (file) historicalFiles.add(file);\n }\n }\n\n for (const comment of snapshot?.comments ?? []) {\n if (\n comment.user?.type === \"Bot\" &&\n comment.body?.startsWith(\"<!-- react-luau-doctor:review -->\")\n ) {\n const file = canonicalFile(comment.path, comment.commit_id ?? \"\");\n\n if (file) historicalFiles.add(file);\n }\n }\n\n const reports: Array<{ projectRoot: string; report: ScanReport }> = [];\n const comparisons: Array<{ projectRoot: string; report: ScanReport }> = [];\n const currentDiagnostics: Diagnostic[] = [];\n const fixed: FixedDiagnostic[] = [];\n const verifiedFiles = new Set<string>();\n const deletedFiles = new Set<string>();\n const uncertainFiles = new Set<string>();\n const unverifiedFiles = new Set<string>();\n const verificationSkippedFiles = new Set<string>();\n const configs = roots.map((root) => ({ root, config: loadConfigWithSource(root).config }));\n const signature = createHash(\"sha256\")\n .update(\n JSON.stringify({\n version: packageJson.version,\n configs: configs.map(({ root, config }) => ({\n root: path.relative(directory, root),\n config,\n })),\n }),\n )\n .digest(\"hex\");\n let complete = true;\n let potentiallyRelocated = false;\n const normalize = (file: string) => file.split(path.sep).join(\"/\");\n const relativeFile = (file: string, root: string) =>\n normalize(path.relative(directory, path.resolve(root, file)));\n const rebaseDiagnostic = (diagnostic: Diagnostic, root: string): Diagnostic => ({\n ...diagnostic,\n file: relativeFile(diagnostic.file, root),\n });\n\n for (const { root: projectRoot, config } of configs) {\n const sources = new Map<string, string>();\n const eligibleFiles = new Set<string>();\n const scope = isPullRequest ? settings.scope : \"full\";\n const comparisonOptions = {\n scope: \"changed\" as const,\n base,\n config,\n minSeverity: \"suggestion\" as const,\n categories: config.categories,\n respectInlineDisables: config.respectInlineDisables ?? true,\n onDelta: (\n current: Diagnostic[],\n baseline: Diagnostic[],\n context: Parameters<NonNullable<ScopedScanOptions[\"onDelta\"]>>[2],\n ) => {\n complete &&=\n !context.current.partial &&\n !context.baseline.partial &&\n !context.current.unverifiedFiles?.length &&\n !context.baseline.unverifiedFiles?.length;\n\n for (const file of [\n ...(context.current.unverifiedFiles ?? []),\n ...(context.baseline.unverifiedFiles ?? []),\n ]) {\n unverifiedFiles.add(relativeFile(file, projectRoot));\n }\n\n const skipped = new Set([\n ...(context.current.skippedFiles ?? []),\n ...(context.baseline.skippedFiles ?? []),\n ]);\n const currentFiles = new Set(context.plan.currentFiles.map((file) => file.relativePath));\n\n for (const file of context.plan.changedFiles) {\n const repoFile = repoRelativeDiagnosticPath(projectRoot, file, repoRoot);\n eligibleFiles.add(repoFile);\n\n if (!currentFiles.has(file)) deletedFiles.add(repoFile);\n\n if (!skipped.has(file)) verifiedFiles.add(repoFile);\n }\n\n for (const input of context.plan.currentFiles) {\n if (input.relativePath && input.source !== undefined) {\n sources.set(\n repoRelativeDiagnosticPath(projectRoot, input.relativePath, repoRoot),\n input.source,\n );\n }\n }\n\n for (const diagnostic of current) {\n currentDiagnostics.push(rebaseDiagnostic(diagnostic, projectRoot));\n }\n\n if (complete) {\n const baselineSources = new Map(\n context.plan.baselineFiles.map((file) => [\n file.relativePath,\n file.source?.split(/\\r?\\n/) ?? [],\n ]),\n );\n const currentSources = new Map(\n context.plan.currentFiles.map((file) => [\n file.relativePath,\n file.source?.split(/\\r?\\n/) ?? [],\n ]),\n );\n\n for (const diagnostic of diagnosticDifference(baseline, current, {\n left: (entry) =>\n baselineSources.get(entry.file)?.[entry.location.line - 1]?.trim() ?? \"\",\n right: (entry) =>\n currentSources.get(entry.file)?.[entry.location.line - 1]?.trim() ?? \"\",\n })) {\n if (\n !currentFiles.has(diagnostic.file) &&\n current.some(\n (entry) =>\n entry.file !== diagnostic.file &&\n entry.rule === diagnostic.rule &&\n entry.severity === diagnostic.severity &&\n entry.message === diagnostic.message,\n )\n ) {\n potentiallyRelocated = true;\n continue;\n }\n\n const oldFile = context.plan.baselinePaths.get(diagnostic.file) ?? diagnostic.file;\n const oldSource =\n context.plan.baselineFiles.find((file) => file.relativePath === diagnostic.file)\n ?.source ?? \"\";\n const newSource =\n sources.get(repoRelativeDiagnosticPath(projectRoot, diagnostic.file, repoRoot)) ?? \"\";\n // Suppression changes cannot establish that the underlying issue was fixed\n const directives = (source: string) =>\n source\n .split(/\\r?\\n/)\n .filter((line) => /react-luau-doctor.*(?:disable|ignore)/i.test(line))\n .join(\"\\n\");\n\n if (directives(oldSource) !== directives(newSource)) continue;\n\n fixed.push({\n ...rebaseDiagnostic({ ...diagnostic, file: oldFile }, projectRoot),\n ...(diagnostic.baselineLocationUncertain ? { baselineLocationUncertain: true } : {}),\n });\n }\n }\n },\n };\n const report = await scanProjectWithScope(projectRoot, { ...comparisonOptions, scope });\n reports.push({ projectRoot, report });\n\n for (const file of report.unverifiedFiles ?? []) {\n unverifiedFiles.add(relativeFile(file, projectRoot));\n }\n\n complete &&= !report.partial && !report.unverifiedFiles?.length;\n\n if (isPullRequest && base) {\n const comparison =\n scope === \"changed\" ? report : await scanProjectWithScope(projectRoot, comparisonOptions);\n comparisons.push({ projectRoot, report: comparison });\n // Only historical files outside the current PR diff need a supplementary scan\n const extraFiles: Array<{ absolutePath: string; relativePath: string; source: string }> = [];\n\n for (const file of historicalFiles) {\n const absolutePath = path.resolve(repoRoot, file);\n const relativePath = normalize(path.relative(projectRoot, absolutePath));\n\n if (\n relativePath.startsWith(\"../\") ||\n path.isAbsolute(relativePath) ||\n !isSelectedLuauPath(relativePath, config) ||\n eligibleFiles.has(file)\n ) {\n continue;\n }\n\n eligibleFiles.add(file);\n\n if (!fs.existsSync(absolutePath)) {\n const existsAtHead = gitResult(repoRoot, [\"ls-tree\", \"-z\", head, \"--\", file]);\n\n if (existsAtHead === \"\") {\n verifiedFiles.add(file);\n deletedFiles.add(file);\n }\n\n continue;\n }\n\n const source = fs.readFileSync(absolutePath, \"utf8\");\n sources.set(file, source);\n extraFiles.push({ absolutePath, relativePath, source });\n }\n\n if (extraFiles.length) {\n const extra = await scanPath(projectRoot, {\n files: extraFiles,\n projectRoot,\n config,\n categories: config.categories,\n });\n complete &&= !extra.partial && !extra.unverifiedFiles?.length;\n\n for (const file of extra.unverifiedFiles ?? []) {\n unverifiedFiles.add(relativeFile(file, projectRoot));\n }\n\n for (const file of extra.skippedFiles ?? []) {\n verificationSkippedFiles.add(relativeFile(file, projectRoot));\n }\n\n for (const file of extraFiles) {\n if (!extra.skippedFiles?.includes(file.relativePath)) {\n verifiedFiles.add(repoRelativeDiagnosticPath(projectRoot, file.relativePath, repoRoot));\n }\n }\n\n currentDiagnostics.push(\n ...extra.diagnostics.map((diagnostic) => rebaseDiagnostic(diagnostic, projectRoot)),\n );\n }\n }\n\n for (const [file, source] of sources) {\n if (/react-luau-doctor.*(?:disable|ignore)/i.test(source)) uncertainFiles.add(file);\n }\n }\n\n const report =\n roots.length === 1 && roots[0] === directory\n ? reports[0].report\n : aggregateReports(directory, reports);\n const comparison = comparisons.length ? aggregateReports(directory, comparisons) : report;\n const sourceCache = new Map<string, string[]>();\n const toFinding = (diagnostic: Diagnostic): ReviewFinding => {\n const file = repoRelativeDiagnosticPath(directory, diagnostic.file, repoRoot);\n const absolute = path.resolve(repoRoot, file);\n\n if (!sourceCache.has(file)) {\n sourceCache.set(\n file,\n fs.existsSync(absolute) ? fs.readFileSync(absolute, \"utf8\").split(/\\r?\\n/) : [],\n );\n }\n\n return {\n file,\n rule: diagnostic.rule,\n severity: diagnostic.severity,\n message: diagnostic.message,\n line: diagnostic.location.line,\n column: diagnostic.location.column,\n diagnosticId: diagnostic.id,\n anchor: createHash(\"sha256\")\n .update(sourceCache.get(file)?.[diagnostic.location.line - 1]?.trim() ?? \"\")\n .digest(\"hex\")\n .slice(0, 16),\n status: \"active\",\n };\n };\n\n return {\n repoRoot,\n report: {\n ...report,\n partial: Boolean(report.partial) || !complete,\n unverifiedFiles: unverifiedFiles.size ? [...unverifiedFiles].sort() : undefined,\n skippedFiles: [\n ...new Set([...(report.skippedFiles ?? []), ...verificationSkippedFiles]),\n ].sort(),\n notes: potentiallyRelocated\n ? [\n ...(report.notes ?? []),\n \"Some removed findings may have moved to other files and were not counted as fixed\",\n ]\n : report.notes,\n },\n comparison,\n fixed: complete ? fixed : [],\n analysis: {\n signature,\n complete,\n current: currentDiagnostics.map(toFinding),\n introduced: comparison.diagnostics.map((diagnostic) => ({\n diagnostic,\n finding: toFinding(diagnostic),\n })),\n verifiedFiles,\n deletedFiles,\n canonicalFile,\n eligible: (finding) =>\n !uncertainFiles.has(finding.file) &&\n configs.some(({ root, config }) => {\n const relative = normalize(path.relative(root, path.resolve(repoRoot, finding.file)));\n\n return (\n !relative.startsWith(\"../\") &&\n !path.isAbsolute(relative) &&\n isSelectedLuauPath(relative, config) &&\n config.rules?.[finding.rule] !== \"off\"\n );\n }),\n },\n };\n}\n\nfunction shouldBlock(report: ScanReport, level: BlockingLevel): boolean {\n if (level === \"none\") return false;\n\n if (level === \"warning\") return report.counts.error > 0 || report.counts.warning > 0;\n\n return report.counts.error > 0;\n}\n\nfunction affectedFiles(report: ScanReport): number {\n return new Set(report.diagnostics.map((diagnostic) => diagnostic.file)).size;\n}\n\nfunction writeOutput(name: string, value: string | number): void {\n const outputFile = process.env.GITHUB_OUTPUT;\n\n if (!outputFile) return;\n\n fs.appendFileSync(outputFile, `${name}=${value}\\n`);\n}\n\nfunction githubEvent(): GitHubEvent {\n const filename = process.env.GITHUB_EVENT_PATH;\n\n if (!filename || !fs.existsSync(filename)) return {};\n\n return JSON.parse(fs.readFileSync(filename, \"utf8\")) as GitHubEvent;\n}\n\nfunction githubRepo(event: GitHubEvent): string | null {\n return process.env.GITHUB_REPOSITORY ?? event.repository?.full_name ?? null;\n}\n\nfunction githubRunUrl(): string | null {\n const server = process.env.GITHUB_SERVER_URL;\n const repository = process.env.GITHUB_REPOSITORY;\n const runId = process.env.GITHUB_RUN_ID;\n\n return server && repository && runId ? `${server}/${repository}/actions/runs/${runId}` : null;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction repoRelativeDiagnosticPath(\n directory: string,\n diagnosticFile: string,\n repoRoot: string,\n): string {\n const absoluteDirectory = path.resolve(directory);\n const prefix = path.relative(repoRoot, absoluteDirectory).split(path.sep).join(\"/\");\n\n return prefix && prefix !== \".\" ? path.posix.join(prefix, diagnosticFile) : diagnosticFile;\n}\n\nfunction githubFileUrl(\n repo: string,\n sha: string,\n diagnostic: Diagnostic,\n directory: string,\n repoRoot: string,\n): string {\n const server = process.env.GITHUB_SERVER_URL ?? \"https://github.com\";\n const repoPath = repoRelativeDiagnosticPath(directory, diagnostic.file, repoRoot);\n const encoded = repoPath\n .split(\"/\")\n .map((segment) =>\n encodeURIComponent(segment).replace(\n /[!'()*]/g,\n (char) => `%${char.charCodeAt(0).toString(16)}`,\n ),\n )\n .join(\"/\");\n\n return `${server}/${repo}/blob/${sha}/${encoded}${(diagnostic as FixedDiagnostic).baselineLocationUncertain ? \"\" : `#L${diagnostic.location.line}`}`;\n}\n\nasync function publishCommitStatus(\n client: GitHubClient,\n sha: string,\n report: ScanReport,\n blocking: BlockingLevel,\n): Promise<void> {\n const blocked = shouldBlock(report, blocking);\n const body = {\n state: report.partial ? \"error\" : blocked ? \"failure\" : \"success\",\n context: \"React-Luau Doctor\",\n description: report.partial\n ? \"Analysis incomplete; findings and fixes are unverified\"\n : `Score ${report.score}/100 · ${report.counts.error} errors · ${report.counts.warning} warnings`,\n target_url: githubRunUrl() ?? undefined,\n };\n\n if (client.pullNumber) await client.mutate(`/statuses/${sha}`, \"POST\", body);\n else await client.request(`/statuses/${sha}`, { method: \"POST\", body });\n}\n\ninterface CiRunOptions extends CiSettings {}\n\nfunction parseCiRunOptions(argv: string[]): CiRunOptions {\n const settings = { ...DEFAULT_SETTINGS };\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n\n if (arg === \"--directory\") {\n const parsed = nextValue(argv, index, arg);\n settings.directory = parsed.value;\n index = parsed.nextIndex;\n } else if (arg === \"--project\") {\n const parsed = nextValue(argv, index, arg);\n settings.project = parsed.value;\n index = parsed.nextIndex;\n } else if (arg === \"--blocking\") {\n const parsed = nextValue(argv, index, arg);\n settings.blocking = parseBlocking(parsed.value);\n index = parsed.nextIndex;\n } else if (arg === \"--scope\") {\n const parsed = nextValue(argv, index, arg);\n settings.scope = parseScope(parsed.value);\n index = parsed.nextIndex;\n } else if (arg === \"--comment\") settings.comment = true;\n else if (arg === \"--no-comment\") settings.comment = false;\n else if (arg === \"--review-comments\") settings.reviewComments = true;\n else if (arg === \"--no-review-comments\") settings.reviewComments = false;\n else if (arg === \"--commit-status\") settings.commitStatus = true;\n else if (arg === \"--no-commit-status\") settings.commitStatus = false;\n else throw new Error(`Unknown ci run option: ${arg}`);\n }\n\n return settings;\n}\n\nasync function runCiJob(argv: string[]): Promise<void> {\n const settings = parseCiRunOptions(argv);\n const eventName = process.env.GITHUB_EVENT_NAME ?? \"\";\n\n if (eventName === \"pull_request_target\") {\n throw new Error(\n \"ci run does not execute PR analysis under pull_request_target; use pull_request with least-privilege permissions\",\n );\n }\n\n const event = githubEvent();\n const isPullRequest = eventName === \"pull_request\" && event.pull_request !== undefined;\n const base = isPullRequest ? event.pull_request!.base.sha : undefined;\n const head = isPullRequest ? event.pull_request!.head.sha : (process.env.GITHUB_SHA ?? \"HEAD\");\n const repo = githubRepo(event);\n const client = repo\n ? new GitHubClient(repo, event.pull_request?.number ?? 0, {\n head,\n base: base ?? \"\",\n runId: process.env.GITHUB_RUN_ID ?? \"\",\n attempt: process.env.GITHUB_RUN_ATTEMPT ?? \"1\",\n })\n : undefined;\n let snapshot: ReviewSnapshot | undefined;\n\n if (client && isPullRequest && settings.reviewComments) {\n try {\n snapshot = await reviewSnapshot(client);\n } catch (error) {\n process.stderr.write(\n `react-luau-doctor: could not update inline review comments: ${errorMessage(error)}\\n`,\n );\n }\n }\n\n const scan = await scanForCi(settings, isPullRequest, base, head, snapshot);\n const { report, fixed, analysis } = scan;\n const baselineCommit = scan.comparison.base ?? base;\n const skipped =\n isPullRequest &&\n report.scannedFiles === 0 &&\n fixed.length === 0 &&\n report.diagnostics.length === 0 &&\n !report.partial;\n const effectiveBlocking = isPullRequest ? settings.blocking : \"none\";\n process.stdout.write(\n `${renderTextReport(report, true, false, false, process.stdout.columns ?? 120)}\\n`,\n );\n const annotations = renderAnnotations(report);\n\n if (annotations) process.stdout.write(`${annotations}\\n`);\n\n writeOutput(\"score\", report.score);\n writeOutput(\"total-issues\", report.diagnostics.length);\n writeOutput(\"fixed-issues\", fixed.length);\n writeOutput(\"error-count\", report.counts.error);\n writeOutput(\"warning-count\", report.counts.warning);\n writeOutput(\"suggestion-count\", report.counts.suggestion);\n writeOutput(\"affected-files\", affectedFiles(report));\n writeOutput(\"analysis-complete\", report.partial ? \"false\" : \"true\");\n const render = (inlineCount: number, limit?: number) =>\n renderSummaryComment(report, {\n baseBranch: event.pull_request?.base.ref ?? \"baseline\",\n fixed,\n sha: head,\n inlineCount,\n incomplete: report.partial,\n skipped,\n runUrl: githubRunUrl(),\n limit,\n includeDiagnosticDetails: limit === Number.POSITIVE_INFINITY,\n url: (diagnostic, baseline) =>\n githubFileUrl(\n repo ?? \"unknown/repository\",\n baseline ? (baselineCommit ?? \"HEAD\") : head,\n diagnostic,\n settings.directory,\n scan.repoRoot,\n ),\n });\n const fullReport = render(0, Number.POSITIVE_INFINITY);\n\n if (process.env.GITHUB_STEP_SUMMARY) {\n // Keep complete reports available without depending on annotation or comment limits\n if (Buffer.byteLength(fullReport) < 900_000) {\n fs.appendFileSync(process.env.GITHUB_STEP_SUMMARY, fullReport);\n } else {\n fs.appendFileSync(\n process.env.GITHUB_STEP_SUMMARY,\n `${render(0)}\\nThe complete diagnostic report exceeds the workflow summary limit and is available in the report artifact and logs\\n`,\n );\n }\n }\n\n const reportFile = path.join(\n fs.mkdtempSync(path.join(process.env.RUNNER_TEMP ?? os.tmpdir(), \"react-luau-doctor-report-\")),\n \"report.json\",\n );\n fs.writeFileSync(\n reportFile,\n JSON.stringify(\n {\n ...report,\n fixedDiagnostics: fixed,\n baseBranch: event.pull_request?.base.ref,\n baseCommit: baselineCommit,\n baseBranchCommit: base,\n headCommit: head,\n },\n null,\n 2,\n ) + \"\\n\",\n );\n writeOutput(\"report-path\", reportFile);\n process.stdout.write(\n `Full diagnostic report\\n${JSON.stringify({ ...report, fixedDiagnostics: fixed })}\\n`,\n );\n\n if (client && isPullRequest) {\n let inlineCount =\n snapshot?.comments.filter(\n (comment) =>\n comment.user?.type === \"Bot\" &&\n comment.body?.startsWith(\"<!-- react-luau-doctor:review -->\"),\n ).length ?? 0;\n let stale = false;\n const publishSummary = async () => {\n if (!settings.comment || stale) return;\n\n try {\n await client.sticky(render(inlineCount), !report.partial);\n } catch (error) {\n stale ||= error instanceof StalePublication;\n process.stderr.write(\n `react-luau-doctor: could not update the sticky PR comment: ${errorMessage(error)}\\n`,\n );\n }\n };\n // The summary also acts as the run watermark before reconciling historical reviews\n await publishSummary();\n\n if (settings.reviewComments && snapshot && base && !stale) {\n try {\n const lines = createGitScopePlan(path.resolve(settings.directory), {\n scope: \"lines\",\n base,\n }).changedLines;\n const latestSnapshot = await reviewSnapshot(client);\n inlineCount = await reconcileReviews(client, latestSnapshot, analysis, (diagnostic) =>\n (lines.get(diagnostic.file) ?? []).some(\n (range) =>\n diagnostic.location.line >= range.start && diagnostic.location.line <= range.end,\n ),\n );\n } catch (error) {\n stale ||= error instanceof StalePublication;\n process.stderr.write(\n `react-luau-doctor: could not update inline review comments: ${errorMessage(error)}\\n`,\n );\n }\n\n await publishSummary();\n }\n }\n\n if (client && settings.commitStatus) {\n try {\n await publishCommitStatus(client, head, report, effectiveBlocking);\n } catch (error) {\n process.stderr.write(\n `react-luau-doctor: could not publish the commit status: ${errorMessage(error)}\\n`,\n );\n }\n }\n\n if (report.partial || shouldBlock(report, effectiveBlocking)) process.exitCode = 1;\n}\n\nexport async function runCiCommand(argv: string[]): Promise<void> {\n const action = argv[0];\n\n if (action === \"install\" || action === \"config\" || action === \"upgrade\") {\n await runCiManage(action, argv.slice(1));\n\n return;\n }\n\n if (action === \"run\") {\n await runCiJob(argv.slice(1));\n\n return;\n }\n\n throw new Error(\"ci requires install, config, or upgrade\");\n}\n",
42
44
  "import fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport type { DoctorConfig } from \"./types\";\r\n\r\nconst DEFAULT_IGNORES = new Set([\r\n \".git\",\r\n \"node_modules\",\r\n \"Packages\",\r\n \"DevPackages\",\r\n \"ServerPackages\",\r\n \"build\",\r\n \"dist\",\r\n \"out\",\r\n \"vendor\",\r\n \"coverage\",\r\n]);\r\n\r\nfunction normalize(value: string): string {\r\n return value.split(path.sep).join(\"/\");\r\n}\r\n\r\nfunction wildcardToRegex(pattern: string): RegExp {\r\n const normalized = normalize(pattern);\r\n let source = \"\";\r\n\r\n for (let index = 0; index < normalized.length; index += 1) {\r\n const char = normalized[index];\r\n const next = normalized[index + 1];\r\n const afterNext = normalized[index + 2];\r\n\r\n if (char === \"*\" && next === \"*\" && afterNext === \"/\") {\r\n source += \"(?:.*/)?\";\r\n index += 2;\r\n continue;\r\n }\r\n if (char === \"*\" && next === \"*\") {\r\n source += \".*\";\r\n index += 1;\r\n continue;\r\n }\r\n if (char === \"*\") {\r\n source += \"[^/]*\";\r\n continue;\r\n }\r\n if (char === \"?\") {\r\n source += \"[^/]\";\r\n continue;\r\n }\r\n\r\n source += /[.+^${}()|[\\]\\\\]/.test(char) ? `\\\\${char}` : char;\r\n }\r\n\r\n return new RegExp(`^${source}$`);\r\n}\r\n\r\nfunction matchesAny(relative: string, patterns: string[] | undefined): boolean {\r\n if (!patterns || patterns.length === 0) return false;\r\n const normalized = normalize(relative);\r\n return patterns.some((pattern) => wildcardToRegex(pattern).test(normalized));\r\n}\r\n\r\nfunction isLuauFile(filename: string): boolean {\r\n return filename.endsWith(\".lua\") || filename.endsWith(\".luau\");\r\n}\r\n\r\n/**\r\n * Apply the same include/ignore selection used by directory discovery to a\r\n * project-root-relative file path. Git scopes supply explicit file inputs, so\r\n * they must call this instead of relying on discoverLuauFiles to filter them.\r\n */\r\nexport function isSelectedLuauPath(relativePath: string, config: DoctorConfig): boolean {\r\n const normalized = normalize(relativePath).replace(/^\\.\\//, \"\");\r\n if (!isLuauFile(normalized)) return false;\r\n\r\n const segments = normalized.split(\"/\");\r\n let directory = \"\";\r\n for (const segment of segments.slice(0, -1)) {\r\n if (DEFAULT_IGNORES.has(segment)) return false;\r\n directory = directory ? `${directory}/${segment}` : segment;\r\n if (matchesAny(`${directory}/`, config.ignore)) return false;\r\n }\r\n\r\n if (matchesAny(normalized, config.ignore)) return false;\r\n if (config.include && config.include.length > 0 && !matchesAny(normalized, config.include)) return false;\r\n return true;\r\n}\r\n\r\nexport function discoverLuauFiles(root: string, config: DoctorConfig, patternRoot = root): string[] {\r\n const targetStat = fs.statSync(root);\r\n if (targetStat.isFile()) {\r\n return isLuauFile(root) ? [root] : [];\r\n }\r\n if (!targetStat.isDirectory()) return [];\r\n\r\n const results: string[] = [];\r\n\r\n const visit = (directory: string): void => {\r\n for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {\r\n const absolute = path.join(directory, entry.name);\r\n const relative = path.relative(patternRoot, absolute);\r\n\r\n if (entry.isDirectory()) {\r\n if (DEFAULT_IGNORES.has(entry.name) || matchesAny(`${normalize(relative)}/`, config.ignore)) continue;\r\n visit(absolute);\r\n continue;\r\n }\r\n\r\n if (!entry.isFile() || !isLuauFile(entry.name)) continue;\r\n if (!isSelectedLuauPath(relative, config)) continue;\r\n results.push(absolute);\r\n }\r\n };\r\n\r\n visit(root);\r\n return results.sort();\r\n}\r\n",
43
- "import { spawnSync } from \"node:child_process\";\r\nimport fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport type { ScanFileInput, ScanScope } from \"./types\";\r\n\r\nexport const gitExecutable = (() => {\r\n const executable = Bun.which(\"git\") ?? \"git\";\r\n if (process.platform !== \"win32\" || !/[\\\\/](?:cmd|bin)[\\\\/]git\\.exe$/i.test(executable)) return executable;\r\n const direct = path.resolve(path.dirname(executable), \"..\", \"mingw64\", \"bin\", \"git.exe\");\r\n return fs.existsSync(direct) ? direct : executable;\r\n})();\r\n\r\nexport interface LineRange {\r\n start: number;\r\n end: number;\r\n}\r\n\r\nexport interface GitScopeOptions {\r\n scope: Exclude<ScanScope, \"full\">;\r\n base?: string;\r\n includeUntracked?: boolean;\r\n staged?: boolean;\r\n changedFilesFrom?: string;\r\n}\r\n\r\nexport interface GitScopePlan {\r\n repoRoot: string;\r\n scanRoot: string;\r\n base: string;\r\n changedFiles: string[];\r\n currentFiles: ScanFileInput[];\r\n baselineFiles: ScanFileInput[];\r\n changedLines: Map<string, LineRange[]>;\r\n}\r\n\r\ninterface GitResult {\r\n status: number;\r\n stdout: string;\r\n stderr: string;\r\n}\r\n\r\nfunction runGit(cwd: string, args: string[], allowFailure = false): GitResult {\r\n const result = spawnSync(gitExecutable, args, {\r\n cwd,\r\n encoding: \"utf8\",\r\n maxBuffer: 64 * 1024 * 1024,\r\n windowsHide: true,\r\n });\r\n\r\n if (result.error) {\r\n if (allowFailure) return { status: 1, stdout: \"\", stderr: result.error.message };\r\n throw new Error(`git ${args[0] ?? \"\"} failed: ${result.error.message}`);\r\n }\r\n\r\n const status = result.status ?? 1;\r\n const stdout = result.stdout ?? \"\";\r\n const stderr = result.stderr ?? \"\";\r\n if (status !== 0 && !allowFailure) {\r\n const detail = stderr.trim() || stdout.trim() || `exit code ${status}`;\r\n throw new Error(`git ${args[0] ?? \"\"} failed: ${detail}`);\r\n }\r\n return { status, stdout, stderr };\r\n}\r\n\r\nfunction normalize(value: string): string {\r\n return value.split(path.sep).join(\"/\");\r\n}\r\n\r\nfunction isInside(parent: string, child: string): boolean {\r\n const relative = path.relative(parent, child);\r\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\r\n}\r\n\r\nfunction isLuauFile(filename: string): boolean {\r\n return filename.endsWith(\".lua\") || filename.endsWith(\".luau\");\r\n}\r\n\r\nfunction lines(output: string): string[] {\r\n return output\r\n .split(/\\r?\\n/)\r\n .map((line) => line.trim())\r\n .filter(Boolean);\r\n}\r\n\r\nexport function findGitRoot(cwd: string): string {\r\n const result = runGit(cwd, [\"rev-parse\", \"--show-toplevel\"], true);\r\n if (result.status !== 0) throw new Error(`Git scope requires a git repository: ${cwd}`);\r\n return path.resolve(result.stdout.trim());\r\n}\r\n\r\nfunction verifyCommit(repoRoot: string, ref: string): string | null {\r\n if (ref.startsWith(\"-\")) throw new Error(`Invalid git ref: ${ref}`);\r\n const result = runGit(repoRoot, [\"rev-parse\", \"--verify\", \"--quiet\", `${ref}^{commit}`], true);\r\n return result.status === 0 ? result.stdout.trim() : null;\r\n}\r\n\r\nfunction mergeBase(repoRoot: string, left: string, right = \"HEAD\"): string | null {\r\n const result = runGit(repoRoot, [\"merge-base\", left, right], true);\r\n return result.status === 0 ? result.stdout.trim() : null;\r\n}\r\n\r\nexport function resolveGitBase(repoRoot: string, requested?: string): string {\r\n if (requested) {\r\n if (requested.startsWith(\"-\")) throw new Error(`Invalid git ref: ${requested}`);\r\n const base = mergeBase(repoRoot, requested);\r\n if (base) return base;\r\n const commit = verifyCommit(repoRoot, requested);\r\n if (!commit) throw new Error(`Could not resolve git base ref: ${requested}`);\r\n return commit;\r\n }\r\n\r\n const environmentBase = process.env.GITHUB_BASE_REF?.trim();\r\n const candidates = [\r\n environmentBase ? `origin/${environmentBase}` : null,\r\n environmentBase ?? null,\r\n \"origin/HEAD\",\r\n \"origin/main\",\r\n \"origin/master\",\r\n \"main\",\r\n \"master\",\r\n ].filter((candidate): candidate is string => Boolean(candidate));\r\n\r\n const head = verifyCommit(repoRoot, \"HEAD\");\r\n // Read refs once. Probing each possible branch with a separate Git process is\r\n // particularly expensive on Windows, including for repositories with no remote.\r\n const refs = new Map<string, string>();\r\n for (const line of lines(runGit(repoRoot, [\"show-ref\"], true).stdout)) {\r\n const match = line.match(/^([0-9a-f]+) (refs\\/\\S+)$/i);\r\n if (match) refs.set(match[2], match[1]);\r\n }\r\n for (const candidate of [...new Set(candidates)]) {\r\n const commit = refs.get(`refs/remotes/${candidate}`)\r\n ?? refs.get(`refs/heads/${candidate}`)\r\n ?? refs.get(`refs/tags/${candidate}`)\r\n ?? refs.get(candidate);\r\n if (!commit || commit === head) continue;\r\n const base = mergeBase(repoRoot, commit);\r\n if (base) return base;\r\n }\r\n\r\n return head ?? \"HEAD\";\r\n}\r\n\r\nfunction readChangedFilesFile(filename: string, repoRoot: string): string[] {\r\n let content: string;\r\n try {\r\n content = fs.readFileSync(filename, \"utf8\");\r\n } catch (error) {\r\n const detail = error instanceof Error ? error.message : String(error);\r\n throw new Error(`Could not read --changed-files-from file \"${filename}\": ${detail}`);\r\n }\r\n\r\n return lines(content).map((entry) => {\r\n const absolute = path.isAbsolute(entry) ? path.resolve(entry) : path.resolve(repoRoot, entry);\r\n return normalize(path.relative(repoRoot, absolute));\r\n });\r\n}\r\n\r\nfunction getUntrackedFiles(repoRoot: string): string[] {\r\n return lines(runGit(repoRoot, [\"ls-files\", \"--others\", \"--exclude-standard\"], true).stdout);\r\n}\r\n\r\ninterface ChangedRepoFile {\r\n currentPath: string;\r\n baselinePath: string | null;\r\n}\r\n\r\nfunction parseNameStatusZ(output: string): ChangedRepoFile[] {\r\n const fields = output.split(\"\\0\");\r\n const changed: ChangedRepoFile[] = [];\r\n for (let index = 0; index < fields.length;) {\r\n const status = fields[index++];\r\n if (!status) continue;\r\n if (status.startsWith(\"R\") || status.startsWith(\"C\")) {\r\n const baselinePath = fields[index++];\r\n const currentPath = fields[index++];\r\n if (baselinePath && currentPath) changed.push({ currentPath: normalize(currentPath), baselinePath: normalize(baselinePath) });\r\n continue;\r\n }\r\n const currentPath = fields[index++];\r\n if (!currentPath) continue;\r\n changed.push({\r\n currentPath: normalize(currentPath),\r\n baselinePath: status.startsWith(\"A\") ? null : normalize(currentPath),\r\n });\r\n }\r\n return changed;\r\n}\r\n\r\nfunction getChangedRepoFiles(\r\n repoRoot: string,\r\n base: string,\r\n options: Pick<GitScopeOptions, \"includeUntracked\" | \"staged\" | \"changedFilesFrom\">,\r\n): ChangedRepoFile[] {\r\n let changed: ChangedRepoFile[];\r\n\r\n if (options.changedFilesFrom) {\r\n changed = readChangedFilesFile(path.resolve(process.cwd(), options.changedFilesFrom), repoRoot).map((currentPath) => ({\r\n currentPath: normalize(currentPath),\r\n baselinePath: normalize(currentPath),\r\n }));\r\n } else {\r\n const args = options.staged\r\n ? [\"diff\", \"--cached\", \"--name-status\", \"-z\", \"--find-renames\", \"--diff-filter=ACDMR\", \"--\"]\r\n : [\"diff\", \"--name-status\", \"-z\", \"--find-renames\", \"--diff-filter=ACDMR\", base, \"--\"];\r\n changed = parseNameStatusZ(runGit(repoRoot, args).stdout);\r\n }\r\n\r\n if (options.includeUntracked && !options.staged) {\r\n changed.push(...getUntrackedFiles(repoRoot).map((currentPath) => ({ currentPath: normalize(currentPath), baselinePath: null })));\r\n }\r\n\r\n const byCurrentPath = new Map<string, ChangedRepoFile>();\r\n for (const entry of changed) byCurrentPath.set(entry.currentPath, entry);\r\n return [...byCurrentPath.values()].sort((a, b) => a.currentPath.localeCompare(b.currentPath));\r\n}\r\n\r\nfunction readGitObject(repoRoot: string, objectSpec: string): string | null {\r\n const result = runGit(repoRoot, [\"show\", objectSpec], true);\r\n return result.status === 0 ? result.stdout : null;\r\n}\r\n\r\nfunction readGitObjects(repoRoot: string, objectSpecs: string[]): Map<string, string | null> {\r\n const unique = [...new Set(objectSpecs)];\r\n const values = new Map<string, string | null>();\r\n if (unique.length === 0) return values;\r\n\r\n const result = spawnSync(gitExecutable, [\"cat-file\", \"--batch\", \"-z\"], {\r\n cwd: repoRoot,\r\n input: `${unique.join(\"\\0\")}\\0`,\r\n encoding: null,\r\n maxBuffer: 256 * 1024 * 1024,\r\n windowsHide: true,\r\n });\r\n if (result.error || (result.status ?? 1) !== 0 || !Buffer.isBuffer(result.stdout)) {\r\n // Fall back to individual reads if a Git version or unusual object name does\r\n // not support the batch path. Correctness is more important than the speedup.\r\n for (const spec of unique) values.set(spec, readGitObject(repoRoot, spec));\r\n return values;\r\n }\r\n\r\n const output = result.stdout;\r\n let offset = 0;\r\n let parseFailed = false;\r\n for (const spec of unique) {\r\n const lineEnd = output.indexOf(0x0a, offset);\r\n if (lineEnd < 0) {\r\n parseFailed = true;\r\n break;\r\n }\r\n const header = output.subarray(offset, lineEnd).toString(\"utf8\");\r\n offset = lineEnd + 1;\r\n if (header.endsWith(\" missing\")) {\r\n values.set(spec, null);\r\n continue;\r\n }\r\n\r\n const match = header.match(/^[0-9a-f]+\\s+\\S+\\s+(\\d+)$/i);\r\n if (!match) {\r\n parseFailed = true;\r\n break;\r\n }\r\n const size = Number(match[1]);\r\n const end = offset + size;\r\n if (!Number.isSafeInteger(size) || size < 0 || end > output.length) {\r\n parseFailed = true;\r\n break;\r\n }\r\n values.set(spec, output.subarray(offset, end).toString(\"utf8\"));\r\n offset = end;\r\n if (output[offset] === 0x0a) offset += 1;\r\n }\r\n\r\n if (parseFailed) {\r\n values.clear();\r\n for (const spec of unique) values.set(spec, readGitObject(repoRoot, spec));\r\n }\r\n return values;\r\n}\r\n\r\nfunction currentSource(repoRoot: string, repoRelativePath: string, staged: boolean): string | null {\r\n if (staged) return readGitObject(repoRoot, `:${repoRelativePath}`);\r\n const absolute = path.join(repoRoot, ...repoRelativePath.split(\"/\"));\r\n if (!fs.existsSync(absolute) || !fs.statSync(absolute).isFile()) return null;\r\n return fs.readFileSync(absolute, \"utf8\");\r\n}\r\n\r\nfunction parseChangedLineRanges(diff: string): LineRange[] {\r\n const ranges: LineRange[] = [];\r\n for (const line of diff.split(/\\r?\\n/)) {\r\n const match = line.match(/^@@\\s+-\\d+(?:,\\d+)?\\s+\\+(\\d+)(?:,(\\d+))?\\s+@@/);\r\n if (!match) continue;\r\n const start = Number(match[1]);\r\n const count = match[2] === undefined ? 1 : Number(match[2]);\r\n if (count <= 0) continue;\r\n ranges.push({ start, end: start + count - 1 });\r\n }\r\n return ranges;\r\n}\r\n\r\nfunction lineRangesForFile(repoRoot: string, base: string, repoRelativePath: string, staged: boolean, source: string): LineRange[] {\r\n const args = staged\r\n ? [\"diff\", \"--cached\", \"--unified=0\", \"--no-color\", \"--\", repoRelativePath]\r\n : [\"diff\", \"--unified=0\", \"--no-color\", base, \"--\", repoRelativePath];\r\n const diff = runGit(repoRoot, args, true).stdout;\r\n const ranges = parseChangedLineRanges(diff);\r\n if (ranges.length > 0) return ranges;\r\n\r\n const tracked = runGit(repoRoot, [\"ls-files\", \"--error-unmatch\", \"--\", repoRelativePath], true).status === 0;\r\n if (!tracked) {\r\n const lineCount = Math.max(1, source.split(/\\r?\\n/).length);\r\n return [{ start: 1, end: lineCount }];\r\n }\r\n return [];\r\n}\r\n\r\nexport function createGitScopePlan(scanRootInput: string, options: GitScopeOptions, relativeRootInput = scanRootInput): GitScopePlan {\r\n const scanRoot = path.resolve(scanRootInput);\r\n const relativeRoot = path.resolve(relativeRootInput);\r\n const repoRoot = findGitRoot(scanRoot);\r\n const base = resolveGitBase(repoRoot, options.base);\r\n const repoFiles = getChangedRepoFiles(repoRoot, base, options);\r\n const currentFiles: ScanFileInput[] = [];\r\n const baselineFiles: ScanFileInput[] = [];\r\n const changedLines = new Map<string, LineRange[]>();\r\n const changedFiles: string[] = [];\r\n const stagedSources = options.staged\r\n ? readGitObjects(repoRoot, repoFiles.map((file) => `:${file.currentPath}`))\r\n : new Map<string, string | null>();\r\n const baselineSources = options.scope === \"changed\"\r\n ? readGitObjects(\r\n repoRoot,\r\n repoFiles\r\n .filter((file) => file.baselinePath !== null)\r\n .map((file) => `${base}:${file.baselinePath}`),\r\n )\r\n : new Map<string, string | null>();\r\n\r\n for (const repoFile of repoFiles) {\r\n const repoRelativePath = repoFile.currentPath;\r\n if (!isLuauFile(repoRelativePath)) continue;\r\n const absolutePath = path.resolve(repoRoot, ...repoRelativePath.split(\"/\"));\r\n if (!isInside(scanRoot, absolutePath)) continue;\r\n\r\n const source = options.staged\r\n ? stagedSources.get(`:${repoRelativePath}`) ?? null\r\n : currentSource(repoRoot, repoRelativePath, false);\r\n const relativePath = normalize(path.relative(relativeRoot, absolutePath));\r\n changedFiles.push(relativePath);\r\n if (source !== null) currentFiles.push({ absolutePath, relativePath, source, forceScan: false });\r\n\r\n const baseline = options.scope !== \"changed\" || repoFile.baselinePath === null\r\n ? null\r\n : baselineSources.get(`${base}:${repoFile.baselinePath}`) ?? null;\r\n if (baseline !== null) baselineFiles.push({ absolutePath, relativePath, source: baseline, forceScan: false });\r\n\r\n if (options.scope === \"lines\" && source !== null) {\r\n changedLines.set(relativePath, lineRangesForFile(repoRoot, base, repoRelativePath, Boolean(options.staged), source));\r\n }\r\n }\r\n\r\n return {\r\n repoRoot,\r\n scanRoot,\r\n base,\r\n changedFiles: [...new Set(changedFiles)].sort(),\r\n currentFiles,\r\n baselineFiles,\r\n changedLines,\r\n };\r\n}\r\n",
44
- "import packageJson from \"../package.json\";\r\nimport type { Diagnostic, RuleDefinition, ScanReport, Severity } from \"./types\";\r\n\r\nconst VERSION = packageJson.version;\r\n\r\nconst SYMBOLS: Record<Severity, string> = {\r\n error: \"x\",\r\n warning: \"!\",\r\n suggestion: \"i\",\r\n};\r\n\r\nconst ANSI = {\r\n reset: \"\\u001b[0m\",\r\n bold: \"\\u001b[1m\",\r\n dim: \"\\u001b[2m\",\r\n red: \"\\u001b[31m\",\r\n yellow: \"\\u001b[33m\",\r\n cyan: \"\\u001b[36m\",\r\n green: \"\\u001b[32m\",\r\n magenta: \"\\u001b[35m\",\r\n};\r\n\r\nfunction paint(value: string, ...codes: string[]): string {\r\n return `${codes.join(\"\")}${value}${ANSI.reset}`;\r\n}\r\n\r\nfunction severityPaint(severity: Severity, value: string): string {\r\n if (severity === \"error\") return paint(value, ANSI.bold, ANSI.red);\r\n if (severity === \"warning\") return paint(value, ANSI.bold, ANSI.yellow);\r\n return paint(value, ANSI.bold, ANSI.magenta);\r\n}\r\n\r\nfunction scoreLabel(score: number): string {\r\n if (score >= 90) return \"Excellent\";\r\n if (score >= 75) return \"Good\";\r\n if (score >= 50) return \"Needs work\";\r\n return \"Critical\";\r\n}\r\n\r\nfunction scorePaint(score: number, value: string): string {\r\n if (score >= 75) return paint(value, ANSI.bold, ANSI.green);\r\n if (score >= 50) return paint(value, ANSI.bold, ANSI.yellow);\r\n return paint(value, ANSI.bold, ANSI.red);\r\n}\r\n\r\nfunction terminalWidth(value: number): number {\r\n return Math.max(32, value || 120);\r\n}\r\n\r\nfunction wrapWords(value: string, width: number): string[] {\r\n const normalized = value.trim().replace(/\\s+/g, \" \");\r\n if (!normalized) return [\"\"];\r\n if (width <= 1) return [normalized];\r\n\r\n const lines: string[] = [];\r\n let line = \"\";\r\n for (const word of normalized.split(\" \")) {\r\n if (!line) {\r\n line = word;\r\n continue;\r\n }\r\n if (line.length + 1 + word.length <= width) {\r\n line += ` ${word}`;\r\n continue;\r\n }\r\n lines.push(line);\r\n line = word;\r\n }\r\n if (line) lines.push(line);\r\n return lines;\r\n}\r\n\r\nfunction wrapFirstThen(value: string, firstWidth: number, continuationWidth: number): string[] {\r\n const normalized = value.trim().replace(/\\s+/g, \" \");\r\n if (!normalized) return [\"\"];\r\n\r\n const words = normalized.split(\" \");\r\n const lines: string[] = [];\r\n let width = Math.max(1, firstWidth);\r\n let line = \"\";\r\n\r\n for (const word of words) {\r\n if (!line) {\r\n line = word;\r\n continue;\r\n }\r\n if (line.length + 1 + word.length <= width) {\r\n line += ` ${word}`;\r\n continue;\r\n }\r\n lines.push(line);\r\n line = word;\r\n width = Math.max(1, continuationWidth);\r\n }\r\n if (line) lines.push(line);\r\n return lines;\r\n}\r\n\r\nfunction renderDiagnosticLines(diagnostic: Diagnostic, colorized: boolean, width: number, baseIndent = \" \"): string[] {\r\n const symbol = SYMBOLS[diagnostic.severity];\r\n const location = `${diagnostic.file}:${diagnostic.location.line}:${diagnostic.location.column}`;\r\n const prefixVisible = baseIndent.length + symbol.length + 1 + location.length + 2;\r\n const continuationIndent = \" \";\r\n const continuationWidth = Math.max(16, width - continuationIndent.length);\r\n const firstWidth = width - prefixVisible;\r\n const splitMessage = firstWidth < 24;\r\n const messageLines = splitMessage\r\n ? wrapWords(diagnostic.message, continuationWidth)\r\n : wrapFirstThen(diagnostic.message, firstWidth, continuationWidth);\r\n const rendered: string[] = [];\r\n\r\n const symbolText = colorized ? severityPaint(diagnostic.severity, symbol) : symbol;\r\n const locationText = colorized ? paint(location, ANSI.bold) : location;\r\n\r\n if (splitMessage) {\r\n rendered.push(`${baseIndent}${symbolText} ${locationText}`);\r\n for (const messageLine of messageLines) rendered.push(`${continuationIndent}${messageLine}`);\r\n return rendered;\r\n }\r\n\r\n rendered.push(`${baseIndent}${symbolText} ${locationText} ${messageLines[0]}`);\r\n for (const messageLine of messageLines.slice(1)) rendered.push(`${continuationIndent}${messageLine}`);\r\n return rendered;\r\n}\r\n\r\nfunction renderIndentedWrapped(value: string, colorized: boolean, width: number, indent = \" \"): string[] {\r\n const wrapped = wrapWords(value, Math.max(16, width - indent.length));\r\n return wrapped.map((line) => `${indent}${colorized ? paint(line, ANSI.dim) : line}`);\r\n}\r\n\r\nexport function renderRulesList(\r\n ruleDefinitions: RuleDefinition[],\r\n terminalWidth = 120,\r\n severityOverrides: ReadonlyMap<string, string> = new Map(),\r\n colorized = false,\r\n): string {\r\n const title = colorized ? paint(\"React-Luau Doctor Rules\", ANSI.bold, ANSI.magenta) : \"React-Luau Doctor Rules\";\r\n if (ruleDefinitions.length === 0) return `${title}\\n0 rules`;\r\n\r\n const ruleWidth = Math.max(\"Rule ID\".length, ...ruleDefinitions.map((rule) => rule.id.length));\r\n const severityWidth = Math.max(\r\n \"Severity\".length,\r\n ...ruleDefinitions.map((rule) => (severityOverrides.get(rule.id) ?? rule.severity).length),\r\n );\r\n const categoryWidth = Math.max(\"Category\".length, ...ruleDefinitions.map((rule) => rule.category.length));\r\n const gap = \" \";\r\n const fixedWidth = ruleWidth + severityWidth + categoryWidth + gap.length * 3;\r\n const tableWidth = Math.max(96, Math.min(160, terminalWidth || 120));\r\n const descriptionWidth = Math.max(28, tableWidth - fixedWidth);\r\n const descriptionIndent = \" \".repeat(fixedWidth);\r\n\r\n const header = `${\"Rule ID\".padEnd(ruleWidth)}${gap}${\"Severity\".padEnd(severityWidth)}${gap}${\"Category\".padEnd(categoryWidth)}${gap}Description`;\r\n const separator = `${\"-\".repeat(ruleWidth)}${gap}${\"-\".repeat(severityWidth)}${gap}${\"-\".repeat(categoryWidth)}${gap}${\"-\".repeat(descriptionWidth)}`;\r\n const lines: string[] = [title, `${ruleDefinitions.length} rules`, \"\", colorized ? paint(header, ANSI.bold) : header, colorized ? paint(separator, ANSI.dim) : separator];\r\n\r\n for (const rule of ruleDefinitions) {\r\n const severity = severityOverrides.get(rule.id) ?? rule.severity;\r\n const descriptionLines = wrapWords(rule.description, descriptionWidth);\r\n const ruleCell = rule.id.padEnd(ruleWidth);\r\n const severityCell = severity.padEnd(severityWidth);\r\n const categoryCell = rule.category.padEnd(categoryWidth);\r\n const firstLine = colorized\r\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]}`\r\n : `${ruleCell}${gap}${severityCell}${gap}${categoryCell}${gap}${descriptionLines[0]}`;\r\n lines.push(firstLine);\r\n for (const continuation of descriptionLines.slice(1)) {\r\n lines.push(colorized ? `${descriptionIndent}${paint(continuation, ANSI.dim)}` : `${descriptionIndent}${continuation}`);\r\n }\r\n }\r\n\r\n return lines.join(\"\\n\");\r\n}\r\n\r\nfunction renderCounts(report: ScanReport, colorized: boolean): string {\r\n if (!colorized) {\r\n return `${report.counts.error} errors, ${report.counts.warning} warnings, ${report.counts.suggestion} suggestions`;\r\n }\r\n return [\r\n severityPaint(\"error\", `${report.counts.error} errors`),\r\n severityPaint(\"warning\", `${report.counts.warning} warnings`),\r\n severityPaint(\"suggestion\", `${report.counts.suggestion} suggestions`),\r\n ].join(\", \");\r\n}\r\n\r\nfunction renderHeader(report: ScanReport, colorized: boolean): string[] {\r\n const title = colorized\r\n ? `${paint(\"React-Luau Doctor\", ANSI.bold, ANSI.magenta)} ${paint(`v${VERSION}`, ANSI.dim)}`\r\n : `React-Luau Doctor v${VERSION}`;\r\n const scopeSuffix = report.scope && report.scope !== \"full\" ? ` (${report.scope} scope)` : \"\";\r\n const lines = [title, `Scanned ${report.scannedFiles} React-Luau files in ${report.durationMs.toFixed(2)}ms${scopeSuffix}`];\r\n if (report.partial) {\r\n const message = `Partial scan: ${(report.skippedFiles ?? []).length} candidate files skipped after the time budget.`;\r\n lines.push(colorized ? severityPaint(\"warning\", message) : message);\r\n }\r\n return lines;\r\n}\r\n\r\nfunction renderVerboseDiagnostics(report: ScanReport, colorized: boolean, width: number): string[] {\r\n if (report.diagnostics.length === 0) {\r\n return [colorized ? paint(\"No issues found.\", ANSI.bold, ANSI.green) : \"No issues found.\"];\r\n }\r\n\r\n const lines: string[] = [];\r\n let currentFile = \"\";\r\n for (const diagnostic of report.diagnostics) {\r\n if (diagnostic.file !== currentFile) {\r\n if (currentFile) lines.push(\"\");\r\n currentFile = diagnostic.file;\r\n lines.push(colorized ? paint(currentFile, ANSI.bold, ANSI.cyan) : currentFile);\r\n }\r\n lines.push(...renderDiagnosticLines(diagnostic, colorized, width));\r\n const metadata = `${diagnostic.rule} [${diagnostic.category}]`;\r\n lines.push(...renderIndentedWrapped(metadata, colorized, width));\r\n if (diagnostic.help) lines.push(...renderIndentedWrapped(diagnostic.help, colorized, width));\r\n }\r\n return lines;\r\n}\r\n\r\ninterface RuleGroup {\r\n rule: string;\r\n category: string;\r\n severity: Severity;\r\n diagnostics: Diagnostic[];\r\n}\r\n\r\nfunction groupedDiagnostics(report: ScanReport): RuleGroup[] {\r\n const groups = new Map<string, RuleGroup>();\r\n const rank: Record<Severity, number> = { error: 2, warning: 1, suggestion: 0 };\r\n for (const diagnostic of report.diagnostics) {\r\n const existing = groups.get(diagnostic.rule);\r\n if (existing) {\r\n existing.diagnostics.push(diagnostic);\r\n if (rank[diagnostic.severity] > rank[existing.severity]) existing.severity = diagnostic.severity;\r\n } else {\r\n groups.set(diagnostic.rule, {\r\n rule: diagnostic.rule,\r\n category: diagnostic.category,\r\n severity: diagnostic.severity,\r\n diagnostics: [diagnostic],\r\n });\r\n }\r\n }\r\n return [...groups.values()].sort(\r\n (a, b) => rank[b.severity] - rank[a.severity] || b.diagnostics.length - a.diagnostics.length || a.rule.localeCompare(b.rule),\r\n );\r\n}\r\n\r\nfunction renderCompactDiagnostics(report: ScanReport, colorized: boolean, width: number): string[] {\r\n if (report.diagnostics.length === 0) {\r\n return [colorized ? paint(\"No issues found.\", ANSI.bold, ANSI.green) : \"No issues found.\"];\r\n }\r\n\r\n const groups = groupedDiagnostics(report);\r\n const shown = groups.slice(0, 3);\r\n const lines: string[] = [\"Top rules:\"];\r\n let shownFindings = 0;\r\n\r\n for (const group of shown) {\r\n shownFindings += group.diagnostics.length;\r\n const symbol = colorized ? severityPaint(group.severity, SYMBOLS[group.severity]) : SYMBOLS[group.severity];\r\n const countLabel = `${group.diagnostics.length} finding${group.diagnostics.length === 1 ? \"\" : \"s\"}`;\r\n const ruleLabel = colorized ? paint(group.rule, ANSI.bold) : group.rule;\r\n const metadata = colorized ? paint(`[${group.category}]`, ANSI.dim) : `[${group.category}]`;\r\n lines.push(`${symbol} ${ruleLabel} ${metadata} ${countLabel}`);\r\n\r\n for (const diagnostic of group.diagnostics.slice(0, 3)) {\r\n const location = `${diagnostic.file}:${diagnostic.location.line}:${diagnostic.location.column}`;\r\n const detail = `${location} ${diagnostic.message}`;\r\n const wrapped = wrapWords(detail, Math.max(16, width - 4));\r\n for (const line of wrapped) lines.push(colorized ? ` ${paint(line, ANSI.dim)}` : ` ${line}`);\r\n }\r\n if (group.diagnostics.length > 3) lines.push(` +${group.diagnostics.length - 3} more`);\r\n }\r\n\r\n const hiddenRules = groups.length - shown.length;\r\n const hiddenFindings = report.diagnostics.length - shownFindings;\r\n if (hiddenRules > 0 || hiddenFindings > 0) {\r\n lines.push(\"\");\r\n lines.push(`+${hiddenRules} more rules and ${hiddenFindings} more findings. Run react-luau-doctor --verbose for every finding.`);\r\n }\r\n return lines;\r\n}\r\n\r\nexport function renderTextReport(\r\n report: ScanReport,\r\n showScore = true,\r\n colorized = false,\r\n verbose = true,\r\n outputWidth = 120,\r\n): string {\r\n const width = terminalWidth(outputWidth);\r\n const lines = renderHeader(report, colorized);\r\n lines.push(\"\");\r\n lines.push(...(verbose ? renderVerboseDiagnostics(report, colorized, width) : renderCompactDiagnostics(report, colorized, width)));\r\n lines.push(\"\");\r\n lines.push(renderCounts(report, colorized));\r\n if (showScore) {\r\n const score = `Score: ${report.score}/100 (${scoreLabel(report.score)})`;\r\n lines.push(colorized ? scorePaint(report.score, score) : score);\r\n }\r\n if (report.notes && report.notes.length > 0) {\r\n lines.push(\"\");\r\n for (const note of report.notes) {\r\n const wrapped = wrapWords(`Note: ${note}`, width);\r\n for (const line of wrapped) lines.push(colorized ? paint(line, ANSI.dim) : line);\r\n }\r\n }\r\n return lines.join(\"\\n\");\r\n}\r\n\r\nfunction escapeWorkflowData(value: string): string {\r\n return value.replace(/%/g, \"%25\").replace(/\\r/g, \"%0D\").replace(/\\n/g, \"%0A\");\r\n}\r\n\r\nfunction escapeWorkflowProperty(value: string): string {\r\n return escapeWorkflowData(value).replace(/:/g, \"%3A\").replace(/,/g, \"%2C\");\r\n}\r\n\r\nexport function renderAnnotations(report: ScanReport): string {\r\n return report.diagnostics\r\n .map((diagnostic) => {\r\n const level = diagnostic.severity === \"error\" ? \"error\" : \"warning\";\r\n const properties = [\r\n `file=${escapeWorkflowProperty(diagnostic.file)}`,\r\n `line=${diagnostic.location.line}`,\r\n `col=${diagnostic.location.column}`,\r\n `endLine=${diagnostic.location.endLine}`,\r\n `endColumn=${diagnostic.location.endColumn}`,\r\n `title=${escapeWorkflowProperty(diagnostic.rule)}`,\r\n ].join(\",\");\r\n return `::${level} ${properties}::${escapeWorkflowData(diagnostic.message)}`;\r\n })\r\n .join(\"\\n\");\r\n}\r\n",
45
- "import path from \"node:path\";\r\nimport { loadConfig } from \"./config\";\r\nimport { isSelectedLuauPath } from \"./files\";\r\nimport { createGitScopePlan, type GitScopePlan } from \"./git\";\r\nimport { createScanAnalysisSession, rebuildReport, scanPath, scoreDiagnostics, type ScanAnalysisSession } from \"./scanner\";\r\nimport type {\r\n Category,\r\n Diagnostic,\r\n DoctorConfig,\r\n ScanOptions,\r\n ScanProgress,\r\n ScanReport,\r\n ScanScope,\r\n Severity,\r\n} from \"./types\";\r\n\r\nexport interface ScopedScanOptions {\r\n scope: ScanScope;\r\n targetRoot?: string;\r\n base?: string;\r\n includeUntracked?: boolean;\r\n staged?: boolean;\r\n changedFilesFrom?: string;\r\n minSeverity?: Severity;\r\n categories?: Category[];\r\n config?: DoctorConfig;\r\n respectInlineDisables?: boolean;\r\n deadlineAt?: number;\r\n onProgress?: (progress: ScanProgress) => void;\r\n cache?: boolean;\r\n parallel?: boolean;\r\n analysisSession?: ScanAnalysisSession;\r\n onDelta?: (current: Diagnostic[], baseline: Diagnostic[]) => void;\r\n}\r\n\r\nfunction diagnosticFingerprint(diagnostic: Diagnostic): string {\r\n return `${diagnostic.file}\\0${diagnostic.rule}\\0${diagnostic.severity}\\0${diagnostic.message}`;\r\n}\r\n\r\nfunction introducedDiagnostics(current: Diagnostic[], baseline: Diagnostic[]): Diagnostic[] {\r\n const baselineCounts = new Map<string, number>();\r\n for (const diagnostic of baseline) {\r\n const fingerprint = diagnosticFingerprint(diagnostic);\r\n baselineCounts.set(fingerprint, (baselineCounts.get(fingerprint) ?? 0) + 1);\r\n }\r\n\r\n const introduced: Diagnostic[] = [];\r\n for (const diagnostic of current) {\r\n const fingerprint = diagnosticFingerprint(diagnostic);\r\n const remaining = baselineCounts.get(fingerprint) ?? 0;\r\n if (remaining > 0) baselineCounts.set(fingerprint, remaining - 1);\r\n else introduced.push(diagnostic);\r\n }\r\n return introduced;\r\n}\r\n\r\nfunction touchesChangedLines(diagnostic: Diagnostic, ranges: Array<{ start: number; end: number }>): boolean {\r\n const locations = [diagnostic.location, ...(diagnostic.highlights ?? [])];\r\n return locations.some((location) =>\r\n ranges.some((range) => location.endLine >= range.start && location.line <= range.end)\r\n );\r\n}\r\n\r\nfunction filterGitScopePlan(plan: GitScopePlan, config: DoctorConfig): GitScopePlan {\r\n const selected = (relativePath: string | undefined): boolean =>\r\n relativePath !== undefined && isSelectedLuauPath(relativePath, config);\r\n\r\n return {\r\n ...plan,\r\n changedFiles: plan.changedFiles.filter((file) => isSelectedLuauPath(file, config)),\r\n currentFiles: plan.currentFiles.filter((file) => selected(file.relativePath)),\r\n baselineFiles: plan.baselineFiles.filter((file) => selected(file.relativePath)),\r\n changedLines: new Map(\r\n [...plan.changedLines].filter(([file]) => isSelectedLuauPath(file, config)),\r\n ),\r\n };\r\n}\r\n\r\nfunction sharedScanOptions(options: ScopedScanOptions, projectRoot: string, phase?: string): ScanOptions & { analysisSession?: ScanAnalysisSession } {\r\n return {\r\n projectRoot,\r\n minSeverity: options.minSeverity,\r\n categories: options.categories,\r\n config: options.config,\r\n respectInlineDisables: options.respectInlineDisables,\r\n deadlineAt: options.deadlineAt,\r\n onProgress: options.onProgress,\r\n progressPhase: phase,\r\n cache: options.cache,\r\n parallel: options.parallel,\r\n analysisSession: options.analysisSession,\r\n };\r\n}\r\n\r\nexport async function scanProjectWithScope(projectRoot: string, options: ScopedScanOptions): Promise<ScanReport> {\r\n const targetRoot = path.resolve(options.targetRoot ?? projectRoot);\r\n const config = options.config ?? loadConfig(projectRoot);\r\n const configuredOptions = options.config ? options : { ...options, config };\r\n\r\n if (options.scope === \"full\" && !options.staged && !options.changedFilesFrom) {\r\n const report = await scanPath(targetRoot, sharedScanOptions(configuredOptions, projectRoot));\r\n return { ...report, scope: \"full\" };\r\n }\r\n\r\n const effectiveScope: Exclude<ScanScope, \"full\"> = options.staged\r\n ? options.scope === \"lines\"\r\n ? \"lines\"\r\n : \"files\"\r\n : options.scope === \"full\"\r\n ? \"files\"\r\n : options.scope;\r\n const scanOptions: ScopedScanOptions = effectiveScope === \"changed\"\r\n ? { ...configuredOptions, analysisSession: options.analysisSession ?? createScanAnalysisSession() }\r\n : configuredOptions;\r\n\r\n const plan = filterGitScopePlan(createGitScopePlan(targetRoot, {\r\n scope: effectiveScope,\r\n base: options.base,\r\n includeUntracked: options.includeUntracked,\r\n staged: options.staged,\r\n changedFilesFrom: options.changedFilesFrom,\r\n }, projectRoot), config);\r\n\r\n const current = await scanPath(targetRoot, {\r\n ...sharedScanOptions(scanOptions, projectRoot, effectiveScope === \"changed\" ? \"current\" : undefined),\r\n files: plan.currentFiles,\r\n });\r\n\r\n let diagnostics = current.diagnostics;\r\n let partial = current.partial;\r\n let skippedFiles = current.skippedFiles;\r\n\r\n if (effectiveScope === \"changed\") {\r\n const baseline = await scanPath(targetRoot, {\r\n ...sharedScanOptions(scanOptions, projectRoot, \"baseline\"),\r\n files: plan.baselineFiles,\r\n });\r\n options.onDelta?.(current.diagnostics, baseline.diagnostics);\r\n const baselineSkipped = new Set(baseline.skippedFiles ?? []);\r\n const baselinePaths = new Set(plan.baselineFiles.map((file) => file.relativePath ?? \"\"));\r\n const comparableCurrent = current.diagnostics.filter(\r\n (diagnostic) => !baselinePaths.has(diagnostic.file) || !baselineSkipped.has(diagnostic.file),\r\n );\r\n diagnostics = introducedDiagnostics(comparableCurrent, baseline.diagnostics);\r\n partial = partial || Boolean(baseline.partial);\r\n skippedFiles = [...new Set([...(current.skippedFiles ?? []), ...(baseline.skippedFiles ?? [])])].sort();\r\n } else if (effectiveScope === \"lines\") {\r\n diagnostics = current.diagnostics.filter((diagnostic) =>\r\n touchesChangedLines(diagnostic, plan.changedLines.get(diagnostic.file) ?? []),\r\n );\r\n }\r\n\r\n return rebuildReport(current, diagnostics, {\r\n partial,\r\n skippedFiles,\r\n scope: options.staged ? \"staged\" : effectiveScope,\r\n base: plan.base,\r\n changedFiles: plan.changedFiles,\r\n });\r\n}\r\n\r\nfunction normalize(value: string): string {\r\n return value.split(path.sep).join(\"/\");\r\n}\r\n\r\nfunction prefixDiagnostic(diagnostic: Diagnostic, prefix: string): Diagnostic {\r\n if (!prefix || prefix === \".\") return diagnostic;\r\n return { ...diagnostic, file: normalize(path.posix.join(prefix, diagnostic.file)) };\r\n}\r\n\r\nexport function aggregateReports(root: string, reports: Array<{ projectRoot: string; report: ScanReport }>): ScanReport {\r\n const startedDuration = reports.reduce((total, entry) => total + entry.report.durationMs, 0);\r\n const diagnostics: Diagnostic[] = [];\r\n const skippedFiles: string[] = [];\r\n const changedFiles: string[] = [];\r\n const notes: string[] = [];\r\n const projects: string[] = [];\r\n let scannedFiles = 0;\r\n let candidateFiles = 0;\r\n let partial = false;\r\n\r\n for (const { projectRoot, report } of reports) {\r\n const prefix = normalize(path.relative(root, projectRoot));\r\n projects.push(prefix || \".\");\r\n scannedFiles += report.scannedFiles;\r\n candidateFiles += report.candidateFiles ?? 0;\r\n partial = partial || Boolean(report.partial);\r\n diagnostics.push(...report.diagnostics.map((diagnostic) => prefixDiagnostic(diagnostic, prefix)));\r\n skippedFiles.push(...(report.skippedFiles ?? []).map((file) => (prefix ? normalize(path.posix.join(prefix, file)) : file)));\r\n changedFiles.push(...(report.changedFiles ?? []).map((file) => (prefix ? normalize(path.posix.join(prefix, file)) : file)));\r\n notes.push(...(report.notes ?? []));\r\n }\r\n\r\n diagnostics.sort(\r\n (a, b) => a.file.localeCompare(b.file) || a.location.line - b.location.line || b.severity.localeCompare(a.severity),\r\n );\r\n const counts: Record<Severity, number> = { error: 0, warning: 0, suggestion: 0 };\r\n for (const diagnostic of diagnostics) counts[diagnostic.severity] += 1;\r\n\r\n const scopes = new Set(reports.map((entry) => entry.report.scope).filter(Boolean));\r\n const bases = new Set(reports.map((entry) => entry.report.base).filter(Boolean));\r\n\r\n return {\r\n schemaVersion: 1,\r\n root,\r\n scannedFiles,\r\n candidateFiles,\r\n durationMs: Math.round(startedDuration * 100) / 100,\r\n score: scoreDiagnostics(diagnostics, scannedFiles),\r\n counts,\r\n diagnostics,\r\n partial,\r\n skippedFiles: [...new Set(skippedFiles)].sort(),\r\n scope: scopes.size === 1 ? [...scopes][0] : undefined,\r\n base: bases.size === 1 ? [...bases][0] : undefined,\r\n changedFiles: [...new Set(changedFiles)].sort(),\r\n projects,\r\n notes: notes.length > 0 ? [...new Set(notes)] : undefined,\r\n };\r\n}\r\n",
46
- "import fs from \"node:fs\";\nimport path from \"node:path\";\n\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 transitiveAffectedFiles,\n} from \"./cache\";\n\nimport { loadConfig, validateKnownRules } from \"./config\";\nimport { discoverLuauFiles } from \"./files\";\n\nimport {\n analyzeReactFile,\n type ReactFileAnalysisInput,\n type ReactFileAnalysisResult,\n} from \"./file-analysis\";\n\nimport { AnalysisWorkerPool, analysisWorkerCount } from \"./parallel\";\n\nimport {\n buildProjectModel,\n type ProjectModelModuleCacheEntry,\n} from \"./project-model\";\n\nimport {\n buildProjectSourceEffects,\n type CachedSourceEffectModule,\n type ProjectEffectParseCacheEntry,\n} from \"./project-effects\";\n\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 & {\n analysisSession?: ScanAnalysisSession;\n};\n\nexport function scoreDiagnostics(\n diagnostics: Diagnostic[],\n scannedFiles: number,\n): number {\n const weightedFindings = diagnostics.reduce((total, diagnostic) => {\n if (diagnostic.severity === \"error\") return total + 8;\n\n if (diagnostic.severity === \"warning\") return total + 3;\n\n return total + 1;\n }, 0);\n\n const penalty = (weightedFindings / Math.max(scannedFiles, 1)) * 20;\n\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> = {\n error: 0,\n warning: 0,\n suggestion: 0,\n };\n\n for (const diagnostic of diagnostics) counts[diagnostic.severity] += 1;\n\n return counts;\n}\n\nexport function rebuildReport(\n report: ScanReport,\n diagnostics: Diagnostic[],\n metadata: Partial<\n Omit<ScanReport, \"schemaVersion\" | \"diagnostics\" | \"counts\" | \"score\">\n > = {},\n): ScanReport {\n const sorted = [...diagnostics].sort(\n (a, b) =>\n a.file.localeCompare(b.file) ||\n a.location.line - b.location.line ||\n b.severity.localeCompare(a.severity),\n );\n\n const next = { ...report, ...metadata };\n\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 candidateInputs(\n targetPath: string,\n projectRoot: string,\n config: DoctorConfig,\n options: ScanOptions,\n): ScanFileInput[] {\n if (options.files) return options.files;\n\n const targetStat = fs.statSync(targetPath);\n\n return discoverLuauFiles(targetPath, config, projectRoot).map(\n (absolutePath) => ({\n absolutePath,\n forceScan: targetStat.isFile(),\n }),\n );\n}\n\nfunction projectInputs(\n root: string,\n config: DoctorConfig,\n scopedCandidates: ScanFileInput[],\n): ScanFileInput[] {\n const all = discoverLuauFiles(root, config).map(\n (absolutePath) => ({ absolutePath }) satisfies ScanFileInput,\n );\n\n const overlays = new Map<string, ScanFileInput>();\n\n for (const candidate of scopedCandidates) {\n const relativePath = normalizeRelative(\n candidate.relativePath ?? path.relative(root, candidate.absolutePath),\n );\n\n overlays.set(relativePath, candidate);\n }\n\n const result: ScanFileInput[] = [];\n const used = new Set<string>();\n\n for (const candidate of all) {\n const relativePath = normalizeRelative(\n path.relative(root, candidate.absolutePath),\n );\n\n result.push(overlays.get(relativePath) ?? candidate);\n used.add(relativePath);\n }\n\n for (const [relativePath, candidate] of overlays) {\n if (!used.has(relativePath)) result.push(candidate);\n }\n\n return result;\n}\n\nexport async function scanPath(\n target = \".\",\n options: ScanRuntimeOptions = {},\n): Promise<ScanReport> {\n const startedAt = performance.now();\n const cwd = path.resolve(options.cwd ?? process.cwd());\n const targetPath = path.resolve(cwd, target);\n\n if (!fs.existsSync(targetPath))\n throw new Error(`Scan path does not exist: ${target}`);\n\n const targetStat = fs.statSync(targetPath);\n\n const defaultRoot = targetStat.isFile()\n ? path.dirname(targetPath)\n : targetPath;\n\n const root = path.resolve(options.projectRoot ?? defaultRoot);\n const config: DoctorConfig = options.config ?? loadConfig(root);\n\n validateKnownRules(config);\n\n const candidates = candidateInputs(targetPath, root, config, options);\n const targetIsProjectRoot = path.resolve(targetPath) === path.resolve(root);\n\n const modelCandidates =\n options.files || !targetIsProjectRoot\n ? projectInputs(root, config, candidates)\n : candidates;\n\n const hasSourceOverlays = modelCandidates.some(\n (candidate) => candidate.source !== undefined,\n );\n\n const canPersistCache = !hasSourceOverlays;\n\n const phaseSuffix = options.progressPhase\n ? ` (${options.progressPhase})`\n : \"\";\n\n const phaseId = (phase: string): string =>\n [options.progressPhase, phase].filter(Boolean).join(\":\");\n\n const progress = (\n phase: string,\n label: string,\n current: number,\n total: number,\n file?: string,\n partial?: boolean,\n ): void => {\n options.onProgress?.({\n current,\n total,\n file,\n partial,\n phase: phaseId(phase),\n label: `${label}${phaseSuffix}`,\n });\n };\n\n const cacheSession = prepareProjectCache(\n root,\n modelCandidates,\n options.cache ?? true,\n (current, total, file) =>\n progress(\"index\", \"Indexing project\", current, total, file),\n );\n\n const deadlineAt =\n options.deadlineAt ??\n (options.maxDurationMs !== undefined\n ? startedAt + options.maxDurationMs\n : undefined);\n\n const respectInlineDisables =\n options.respectInlineDisables ?? config.respectInlineDisables ?? true;\n\n const minSeverity = options.minSeverity ?? \"suggestion\";\n\n const reportCacheKey = stableCacheKey({\n minSeverity,\n categories: options.categories ? [...options.categories].sort() : [],\n respectInlineDisables,\n rules: config.rules ?? {},\n });\n\n const canCacheWholeReport =\n canPersistCache &&\n targetIsProjectRoot &&\n options.files === undefined &&\n deadlineAt === undefined;\n\n const previousReport = canCacheWholeReport\n ? previousCachedReport(cacheSession, reportCacheKey)\n : null;\n\n const previousProject = previousProjectModel(cacheSession);\n\n const previousEffectModules =\n options.analysisSession?.effectModules ?? cachedEffectModules(cacheSession);\n\n const changedFiles = changedProjectFiles(cacheSession);\n\n if (canCacheWholeReport) {\n const reportHit = cachedReport(cacheSession, reportCacheKey);\n\n if (reportHit) {\n progress(\"report-cache\", \"Loading cached results\", 1, 1);\n\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\n const fileHashes = Object.fromEntries(\n Object.entries(cacheSession.files).map(([file, state]) => [\n file,\n state.hash,\n ]),\n );\n\n const materializedCandidates = materializeProjectCandidates(\n cacheSession,\n modelCandidates,\n );\n\n const parallelEnabled =\n options.parallel !== false && deadlineAt === undefined;\n\n const workerCount = parallelEnabled\n ? analysisWorkerCount(\n Math.max(materializedCandidates.length, candidates.length),\n )\n : 1;\n\n const workerPool =\n workerCount > 1 ? new AnalysisWorkerPool(workerCount) : null;\n\n try {\n let project = cachedProjectModel(cacheSession);\n\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\n const rebuilt = buildProjectModel(root, materializedCandidates, {\n fileHashes,\n moduleCache: options.analysisSession?.projectModelModules,\n });\n\n if (project?.sourceEffects) rebuilt.sourceEffects = project.sourceEffects;\n\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(\n \"effects-parse\",\n \"Parsing effect sources\",\n effectProgress.current,\n effectProgress.total,\n effectProgress.file,\n );\n } else if (effectProgress.phase === \"index-functions\") {\n progress(\n \"effects-index-functions\",\n \"Indexing effect functions\",\n effectProgress.current,\n effectProgress.total,\n );\n } else if (effectProgress.phase === \"analyze-calls\") {\n progress(\n \"effects-analyze-calls\",\n \"Resolving effect calls\",\n effectProgress.current,\n effectProgress.total,\n );\n } else if (effectProgress.phase === \"assemble-graph\") {\n progress(\n \"effects-assemble-graph\",\n \"Building effect graph\",\n effectProgress.current,\n effectProgress.total,\n );\n } else if (effectProgress.phase === \"resolve\") {\n progress(\n \"effects-resolve\",\n \"Linking effect dependencies\",\n effectProgress.current,\n effectProgress.total,\n );\n } else if (effectProgress.phase === \"propagate\") {\n progress(\n \"effects-propagate\",\n \"Propagating project effects\",\n effectProgress.current,\n effectProgress.total,\n );\n } else {\n progress(\n \"effects-summarize\",\n \"Finalizing project effects\",\n effectProgress.current,\n effectProgress.total,\n );\n }\n },\n fileHashes,\n previousEffectModules,\n workerPool ?? undefined,\n );\n\n project.sourceEffects = effectBuild.effects;\n cacheSession.effectModules = effectBuild.cacheModules;\n } else if (!cacheSession.effectModules) {\n cacheSession.effectModules = previousEffectModules;\n }\n\n if (options.analysisSession)\n options.analysisSession.effectModules =\n 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 =\n cacheSession.effectModules ?? previousEffectModules;\n\n if (\n canCacheWholeReport &&\n previousReport &&\n previousProject &&\n cacheHasSameFileSet(cacheSession) &&\n projectModelFeatureKey(previousProject) ===\n projectModelFeatureKey(project)\n ) {\n const affectedFiles = transitiveAffectedFiles(\n changedFiles,\n previousEffectModules,\n currentEffectModules,\n );\n\n diagnostics.push(\n ...previousReport.diagnostics.filter(\n (diagnostic) =>\n !affectedFiles.has(normalizeRelative(diagnostic.file)),\n ),\n );\n\n scanCandidates = candidates.filter((candidate) => {\n const relativePath = normalizeRelative(\n candidate.relativePath ?? path.relative(root, candidate.absolutePath),\n );\n\n return affectedFiles.has(relativePath);\n });\n\n incrementalReuse = true;\n }\n\n let processedCandidates = 0;\n\n const scanLabel = incrementalReuse\n ? \"Scanning affected React files\"\n : \"Scanning React files\";\n\n progress(\"scan\", scanLabel, 0, scanCandidates.length);\n\n const applyResult = (result: ReactFileAnalysisResult): void => {\n recordReactFile(cacheSession, result.relativePath, result.isReactFile);\n\n if (result.scanned) scannedFiles += 1;\n\n diagnostics.push(...result.diagnostics);\n };\n\n const prepareCandidate = (\n candidate: ScanFileInput,\n ): {\n input: ReactFileAnalysisInput;\n tree?: ProjectEffectParseCacheEntry[\"tree\"];\n } | null => {\n const relativePath = normalizeRelative(\n candidate.relativePath ?? path.relative(root, candidate.absolutePath),\n );\n\n if (\n candidate.source === undefined &&\n !fs.existsSync(candidate.absolutePath)\n )\n return null;\n\n const forceScan = candidate.forceScan ?? targetStat.isFile();\n const cached = projectParseCache.get(relativePath);\n\n if (\n !forceScan &&\n !cached &&\n !changedFiles.includes(relativePath) &&\n knownReactFile(cacheSession, relativePath) === false\n )\n return null;\n\n const source =\n candidate.source ??\n cached?.source ??\n cacheSession.sources.get(relativePath) ??\n fs.readFileSync(candidate.absolutePath, \"utf8\");\n\n if (!forceScan && !REACT_SOURCE_MARKER.test(source)) {\n recordReactFile(cacheSession, relativePath, false);\n\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\n tree: cached && cached.source === source ? cached.tree : undefined,\n };\n };\n\n if (parallelEnabled) {\n const prepared = scanCandidates\n .map(prepareCandidate)\n .filter((value) => value !== null);\n\n if (workerPool && prepared.length >= 16) {\n let completed = scanCandidates.length - prepared.length;\n progress(\"scan\", scanLabel, completed, scanCandidates.length);\n\n const results = await workerPool.scanReactFiles(\n prepared.map((entry) => entry.input),\n options.onProgress\n ? (count, file) => {\n completed += count;\n\n progress(\n \"scan\",\n scanLabel,\n Math.min(completed, scanCandidates.length),\n scanCandidates.length,\n file,\n );\n }\n : undefined,\n );\n\n for (const result of results) applyResult(result);\n\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\n progress(\n \"scan\",\n scanLabel,\n processedCandidates,\n prepared.length,\n entry.input.relativePath,\n );\n }\n }\n } else {\n for (\n let candidateIndex = 0;\n candidateIndex < scanCandidates.length;\n candidateIndex += 1\n ) {\n const candidate = scanCandidates[candidateIndex];\n\n const relativePath = normalizeRelative(\n candidate.relativePath ?? path.relative(root, candidate.absolutePath),\n );\n\n if (deadlineAt !== undefined && performance.now() >= deadlineAt) {\n for (const remaining of scanCandidates.slice(candidateIndex)) {\n skippedFiles.push(\n normalizeRelative(\n remaining.relativePath ??\n path.relative(root, remaining.absolutePath),\n ),\n );\n }\n\n progress(\n \"scan\",\n scanLabel,\n processedCandidates,\n scanCandidates.length,\n relativePath,\n true,\n );\n\n break;\n }\n\n try {\n const prepared = prepareCandidate(candidate);\n\n if (!prepared) continue;\n\n applyResult(await analyzeReactFile(prepared.input, prepared.tree));\n } finally {\n processedCandidates = candidateIndex + 1;\n\n progress(\n \"scan\",\n scanLabel,\n processedCandidates,\n scanCandidates.length,\n relativePath,\n );\n }\n }\n }\n\n if (incrementalReuse) {\n scannedFiles = Object.values(cacheSession.files).filter(\n (state) => state.isReactFile === true,\n ).length;\n }\n\n diagnostics.sort(\n (a, b) =>\n a.file.localeCompare(b.file) ||\n a.location.line - b.location.line ||\n 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)\n saveProjectCache(\n cacheSession,\n project,\n cacheSession.effectModules ?? cachedEffectModules(cacheSession),\n canCacheWholeReport && !report.partial ? reportCacheKey : undefined,\n canCacheWholeReport && !report.partial\n ? {\n scannedFiles: report.scannedFiles,\n candidateFiles: report.candidateFiles ?? candidates.length,\n diagnostics: report.diagnostics,\n }\n : undefined,\n );\n\n return report;\n } finally {\n workerPool?.close();\n }\n}\n",
47
- "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\";\n\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\n bindingCandidateHooks: Array<\n [\n string,\n ProjectModel[\"bindingCandidateHooks\"] extends Map<string, infer V>\n ? V\n : never,\n ]\n >;\n\n externalCallbackModules: Array<\n [\n string,\n ProjectModel[\"externalCallbackModules\"] extends Map<string, infer V>\n ? V\n : never,\n ]\n >;\n\n bindingApiAlternatives: Array<[string, string]>;\n bindingCompatibleComponentProps: Array<[string, string[]]>;\n staticIterationTables: Array<[string, string[]]>;\n\n conditionalHookModes: Array<\n [\n string,\n ProjectModel[\"conditionalHookModes\"] extends Map<string, infer V>\n ? V\n : never,\n ]\n >;\n\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 namespace: string;\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\nconst analyzerHashes = new Map<string, string>();\n\nfunction hashAnalyzerFile(\n hash: crypto.Hash,\n root: string,\n filename: string,\n): void {\n if (!fs.existsSync(filename)) return;\n\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\n const files: string[] = [];\n\n for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {\n const filename = path.join(directory, entry.name);\n\n if (entry.isDirectory()) files.push(...sourceFiles(filename));\n else if (entry.isFile() && entry.name.endsWith(\".ts\")) files.push(filename);\n }\n\n return files;\n}\n\nfunction currentAnalyzerHash(namespace = \"cli\"): string {\n const existing = analyzerHashes.get(namespace);\n\n if (existing) return existing;\n\n const hash = crypto.createHash(\"sha256\");\n\n let packageRoot = path.resolve(\n path.dirname(fileURLToPath(import.meta.url)),\n \"..\",\n );\n\n let bundledCli: string | null = null;\n\n try {\n const entrypoint = process.argv[1]\n ? fs.realpathSync(process.argv[1])\n : null;\n\n if (\n entrypoint &&\n path.basename(entrypoint) === \"cli.js\" &&\n path.basename(path.dirname(entrypoint)) === \"dist\"\n ) {\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 (namespace !== \"cli\") {\n const runtimeDir = path.dirname(fileURLToPath(import.meta.url));\n hashAnalyzerFile(hash, runtimeDir, path.join(runtimeDir, \"server.js\"));\n hashAnalyzerFile(hash, runtimeDir, path.join(runtimeDir, \"deep-worker.js\"));\n } else if (bundledCli) {\n hashAnalyzerFile(hash, packageRoot, bundledCli);\n\n hashAnalyzerFile(\n hash,\n packageRoot,\n path.join(path.dirname(bundledCli), \"scan-worker.js\"),\n );\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\n hashAnalyzerFile(\n hash,\n packageRoot,\n path.join(packageRoot, \"vendor\", \"tree-sitter-luau.wasm\"),\n );\n\n const result = hash.digest(\"hex\");\n analyzerHashes.set(namespace, result);\n\n return result;\n}\n\nfunction stableValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stableValue);\n\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\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)\n return path.resolve(process.env.REACT_LUAU_DOCTOR_CACHE_DIR);\n\n if (process.platform === \"win32\") {\n const base =\n process.env.LOCALAPPDATA ?? path.join(os.homedir(), \"AppData\", \"Local\");\n\n return path.join(base, \"react-luau-doctor\", \"Cache\");\n }\n\n if (process.platform === \"darwin\")\n return path.join(os.homedir(), \"Library\", \"Caches\", \"react-luau-doctor\");\n\n return path.join(\n process.env.XDG_CACHE_HOME ?? path.join(os.homedir(), \".cache\"),\n \"react-luau-doctor\",\n );\n}\n\nfunction projectCacheFilename(root: string, namespace = \"cli\"): string {\n const canonical =\n process.platform === \"win32\"\n ? path.resolve(root).toLowerCase()\n : path.resolve(root);\n\n return path.join(\n cacheBaseDirectory(),\n `${namespace === \"cli\" ? \"project\" : `project-${namespace}`}-${hashText(canonical).slice(0, 24)}.json`,\n );\n}\n\nfunction readPayload(\n filename: string,\n root: string,\n namespace = \"cli\",\n): ProjectCachePayload | null {\n try {\n const parsed = JSON.parse(\n fs.readFileSync(filename, \"utf8\"),\n ) as ProjectCachePayload;\n\n if (\n parsed.analyzerHash !== currentAnalyzerHash(namespace) ||\n path.resolve(parsed.root) !== path.resolve(root) ||\n !parsed.files ||\n typeof parsed.fingerprint !== \"string\"\n )\n return null;\n\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(\n previous: CachedFileState | undefined,\n stat: fs.Stats,\n): 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 namespace = \"cli\",\n): ProjectCacheSession {\n const cacheEnabled =\n enabled && process.env.REACT_LUAU_DOCTOR_DISABLE_CACHE !== \"1\";\n\n const filename = cacheEnabled ? projectCacheFilename(root, namespace) : null;\n const previous = filename ? readPayload(filename, root, namespace) : 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\n for (let index = 0; index < candidates.length; index += 1) {\n const candidate = candidates[index];\n\n const relativePath = normalizeRelative(\n candidate.relativePath ?? path.relative(root, candidate.absolutePath),\n );\n\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\n state = {\n hash,\n\n isReactFile:\n previousState?.hash === hash ? previousState.isReactFile : undefined,\n };\n } else {\n try {\n const stat = fs.statSync(candidate.absolutePath);\n\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\n state = {\n size: stat.size,\n mtimeMs: stat.mtimeMs,\n ctimeMs: stat.ctimeMs,\n hash,\n\n isReactFile:\n previousState?.hash === hash\n ? previousState.isReactFile\n : 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\n return {\n namespace,\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(\n session: ProjectCacheSession,\n candidates: ScanFileInput[],\n): ScanFileInput[] {\n return candidates.map((candidate) => {\n if (candidate.source !== undefined) return candidate;\n\n const relativePath = normalizeRelative(\n candidate.relativePath ??\n path.relative(session.root, candidate.absolutePath),\n );\n\n const cachedSource = session.sources.get(relativePath);\n\n if (cachedSource !== undefined)\n return { ...candidate, relativePath, source: cachedSource };\n\n try {\n const source = fs.readFileSync(candidate.absolutePath, \"utf8\");\n session.sources.set(relativePath, source);\n\n return { ...candidate, relativePath, source };\n } catch {\n return { ...candidate, relativePath };\n }\n });\n}\n\nfunction serializeSourceEffect(\n summary: SourceEffectModuleSummary,\n): SerializedSourceEffectSummary {\n return {\n effectfulMembers: [...summary.effectfulMembers].sort(),\n effectfulExport: summary.effectfulExport,\n mutatingMembers: [...summary.mutatingMembers].sort(),\n\n mutatingExportParameters: [...summary.mutatingExportParameters].sort(\n (a, b) => a - b,\n ),\n\n mutatingMemberParameters: [...summary.mutatingMemberParameters]\n .map(\n ([name, indexes]) =>\n [name, [...indexes].sort((a, b) => a - b)] as [string, number[]],\n )\n .sort(([left], [right]) => left.localeCompare(right)),\n\n localMutatingParameters: [...summary.localMutatingParameters]\n .map(\n ([name, indexes]) =>\n [name, [...indexes].sort((a, b) => a - b)] as [string, number[]],\n )\n .sort(([left], [right]) => left.localeCompare(right)),\n\n instanceFactories: [...summary.instanceFactories].sort(),\n };\n}\n\nfunction deserializeSourceEffect(\n summary: SerializedSourceEffectSummary,\n): 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\n mutatingMemberParameters: new Map(\n (summary.mutatingMemberParameters ?? []).map(([name, indexes]) => [\n name,\n new Set(indexes),\n ]),\n ),\n\n localMutatingParameters: new Map(\n (summary.localMutatingParameters ?? []).map(([name, indexes]) => [\n name,\n new Set(indexes),\n ]),\n ),\n\n instanceFactories: new Set(summary.instanceFactories),\n };\n}\n\nexport function serializeProjectModel(\n project: ProjectModel,\n): SerializedProjectModel {\n return {\n memoizedModules: [...project.memoizedModules],\n bindingCandidateHooks: [...project.bindingCandidateHooks],\n externalCallbackModules: [...project.externalCallbackModules],\n bindingApiAlternatives: [...project.bindingApiAlternatives],\n\n bindingCompatibleComponentProps: [\n ...project.bindingCompatibleComponentProps,\n ].map(([key, value]) => [key, [...value].sort()]),\n\n staticIterationTables: [...project.staticIterationTables].map(\n ([key, value]) => [key, [...value].sort()],\n ),\n\n conditionalHookModes: [...project.conditionalHookModes],\n reactHookModules: [...project.reactHookModules],\n\n sourceEffects: [...project.sourceEffects].map(([key, value]) => [\n key,\n serializeSourceEffect(value),\n ]),\n };\n}\n\nexport function deserializeProjectModel(\n project: SerializedProjectModel,\n): 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\n bindingCompatibleComponentProps: new Map(\n project.bindingCompatibleComponentProps.map(([key, value]) => [\n key,\n new Set(value),\n ]),\n ),\n\n staticIterationTables: new Map(\n project.staticIterationTables.map(([key, value]) => [\n key,\n new Set(value),\n ]),\n ),\n\n conditionalHookModes: new Map(project.conditionalHookModes),\n reactHookModules: new Map(project.reactHookModules ?? []),\n\n sourceEffects: new Map(\n project.sourceEffects.map(([key, value]) => [\n key,\n deserializeSourceEffect(value),\n ]),\n ),\n };\n}\n\nexport function cachedEffectModules(\n session: ProjectCacheSession,\n): Record<string, CachedSourceEffectModule> {\n return session.previous?.effectModules ?? {};\n}\n\nexport function previousProjectModel(\n session: ProjectCacheSession,\n): ProjectModel | null {\n if (!session.previous?.projectModel) return null;\n\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\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(\n session: ProjectCacheSession,\n): ProjectModel | null {\n if (!session.exact || !session.previous?.projectModel) return null;\n\n try {\n return deserializeProjectModel(session.previous.projectModel);\n } catch {\n return null;\n }\n}\n\nexport function previousCachedReport(\n session: ProjectCacheSession,\n key: string,\n): CachedReportData | null {\n const report = session.previous?.reports?.[key];\n\n if (!report) return null;\n\n return {\n scannedFiles: report.scannedFiles,\n candidateFiles: report.candidateFiles,\n diagnostics: report.diagnostics,\n };\n}\n\nexport function cachedReport(\n session: ProjectCacheSession,\n key: string,\n): CachedReportData | null {\n if (!session.exact) return null;\n\n const report = session.previous?.reports?.[key];\n\n if (!report) return null;\n\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\n const previousFiles = Object.keys(session.previous.files).sort();\n const currentFiles = Object.keys(session.files).sort();\n\n return (\n previousFiles.length === currentFiles.length &&\n previousFiles.every((file, index) => file === currentFiles[index])\n );\n}\n\nexport function changedProjectFiles(session: ProjectCacheSession): string[] {\n if (!session.previous) return Object.keys(session.files);\n\n const all = new Set([\n ...Object.keys(session.previous.files),\n ...Object.keys(session.files),\n ]);\n\n return [...all]\n .filter(\n (file) =>\n session.previous?.files[file]?.hash !== session.files[file]?.hash,\n )\n .sort();\n}\n\nexport function 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\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(\n (file) => modules.get(file)?.id ?? file.toLowerCase(),\n );\n\n const visitedIds = new Set(queue);\n\n while (queue.length > 0) {\n const moduleId = queue.shift()!;\n\n for (const importerFile of reverse.get(moduleId) ?? []) {\n if (!affected.has(importerFile)) affected.add(importerFile);\n\n const importerId = modules.get(importerFile)?.id;\n\n if (importerId && !visitedIds.has(importerId)) {\n visitedIds.add(importerId);\n queue.push(importerId);\n }\n }\n }\n\n return affected;\n}\n\nexport function knownReactFile(\n session: ProjectCacheSession,\n relativePath: string,\n): boolean | undefined {\n return session.files[normalizeRelative(relativePath)]?.isReactFile;\n}\n\nexport function recordReactFile(\n session: ProjectCacheSession,\n relativePath: string,\n isReactFile: boolean,\n): void {\n const state = session.files[normalizeRelative(relativePath)];\n\n if (state) state.isReactFile = isReactFile;\n}\n\nexport function saveProjectCache(\n session: ProjectCacheSession,\n project: ProjectModel,\n effectModules: Record<string, CachedSourceEffectModule> = session.previous\n ?.effectModules ?? {},\n reportKey?: string,\n report?: CachedReportData,\n): void {\n if (!session.enabled || !session.filename) return;\n\n const reports: Record<string, CachedReportEntry> = session.exact\n ? { ...(session.previous?.reports ?? {}) }\n : {};\n\n if (reportKey && report)\n reports[reportKey] = { ...report, lastUsedAt: Date.now() };\n\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\n writePayload(session.filename, {\n analyzerHash: currentAnalyzerHash(session.namespace),\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, namespace = \"cli\"): string {\n return projectCacheFilename(root, namespace);\n}\n",
48
- "import crypto from \"node:crypto\";\r\nimport type { SyntaxTree } from \"./syntax\";\r\nimport { createRuleContext } from \"./ast/context\";\r\nimport { buildReactModel } from \"./ast/react-model\";\r\nimport { effectiveSeverity } from \"./config\";\r\nimport { createInlineSuppressionChecker } from \"./inline-disables\";\r\nimport { parseLuau } from \"./parser\";\r\nimport { rules } from \"./rules\";\r\n\r\nimport type {\r\n Category,\r\n Diagnostic,\r\n DiagnosticInput,\r\n DoctorConfig,\r\n ProjectModel,\r\n Severity,\r\n SourceFile,\r\n RuleDefinition,\r\n} from \"./types\";\r\n\r\nconst SEVERITY_RANK: Record<Severity, number> = {\r\n suggestion: 0,\r\n warning: 1,\r\n error: 2,\r\n};\r\n\r\nexport interface ReactFileAnalysisInput {\r\n absolutePath: string;\r\n relativePath: string;\r\n source: string;\r\n forceScan: boolean;\r\n project: ProjectModel;\r\n config: DoctorConfig;\r\n categories?: Category[];\r\n minSeverity: Severity;\r\n respectInlineDisables: boolean;\r\n lsp?: boolean;\r\n}\r\n\r\nexport interface ReactFileAnalysisResult {\r\n relativePath: string;\r\n isReactFile: boolean;\r\n scanned: boolean;\r\n diagnostics: Diagnostic[];\r\n}\r\n\r\nfunction diagnosticId(\r\n file: string,\r\n rule: string,\r\n startIndex: number,\r\n message: string,\r\n): string {\r\n return crypto\r\n .createHash(\"sha256\")\r\n .update(`${file}\\0${rule}\\0${startIndex}\\0${message}`)\r\n .digest(\"hex\")\r\n .slice(0, 16);\r\n}\r\n\r\nfunction nodeLocation(node: DiagnosticInput[\"node\"]): Diagnostic[\"location\"] {\r\n return {\r\n line: node.startPosition.row + 1,\r\n column: node.startPosition.column + 1,\r\n endLine: node.endPosition.row + 1,\r\n endColumn: node.endPosition.column + 1,\r\n };\r\n}\r\n\r\nfunction sameLocation(\r\n left: Diagnostic[\"location\"],\r\n right: Diagnostic[\"location\"],\r\n): boolean {\r\n return (\r\n left.line === right.line &&\r\n left.column === right.column &&\r\n left.endLine === right.endLine &&\r\n left.endColumn === right.endColumn\r\n );\r\n}\r\n\r\nfunction removeSupersededDiagnostics(diagnostics: Diagnostic[]): Diagnostic[] {\r\n return diagnostics.filter((diagnostic) => {\r\n if (diagnostic.rule !== \"react-luau/rerender-high-frequency-state\")\r\n return true;\r\n\r\n return !diagnostics.some(\r\n (candidate) =>\r\n candidate.rule === \"react-luau/prefer-binding-over-state\" &&\r\n sameLocation(candidate.location, diagnostic.location) &&\r\n SEVERITY_RANK[candidate.severity] >= SEVERITY_RANK[diagnostic.severity],\r\n );\r\n });\r\n}\r\n\r\nfunction toDiagnostic(\r\n file: SourceFile,\r\n ruleId: string,\r\n category: Diagnostic[\"category\"],\r\n severity: Severity,\r\n input: DiagnosticInput,\r\n): Diagnostic {\r\n const node = input.node;\r\n const highlights = input.highlights?.map(nodeLocation);\r\n\r\n return {\r\n id: diagnosticId(file.relativePath, ruleId, node.startIndex, input.message),\r\n rule: ruleId,\r\n category,\r\n severity: input.severity ?? severity,\r\n message: input.message,\r\n summary: input.summary,\r\n explanation: input.explanation,\r\n help: input.help,\r\n caveat: input.caveat,\r\n file: file.relativePath,\r\n location: nodeLocation(node),\r\n highlights: highlights && highlights.length > 0 ? highlights : undefined,\r\n fixPreview: input.fixPreview,\r\n\r\n editorRanges: input.editorRanges?.map(({ node, summary }) => ({\r\n location: nodeLocation(node),\r\n summary,\r\n })),\r\n };\r\n}\r\n\r\nexport async function analyzeReactFile(\r\n input: ReactFileAnalysisInput,\r\n tree?: SyntaxTree,\r\n selectedRules: readonly RuleDefinition[] = rules,\r\n): Promise<ReactFileAnalysisResult> {\r\n const parsedTree = tree ?? (await parseLuau(input.source));\r\n\r\n try {\r\n const model = buildReactModel(parsedTree.rootNode, input.project);\r\n\r\n if (!input.forceScan && !model.isReactFile) {\r\n return {\r\n relativePath: input.relativePath,\r\n isReactFile: false,\r\n scanned: false,\r\n diagnostics: [],\r\n };\r\n }\r\n\r\n const file: SourceFile = {\r\n absolutePath: input.absolutePath,\r\n relativePath: input.relativePath,\r\n source: input.source,\r\n tree: parsedTree,\r\n root: parsedTree.rootNode,\r\n model,\r\n project: input.project,\r\n };\r\n\r\n const context = createRuleContext(file);\r\n\r\n const categorySet =\r\n input.categories && input.categories.length > 0\r\n ? new Set(input.categories)\r\n : null;\r\n\r\n const isSuppressed = input.respectInlineDisables\r\n ? createInlineSuppressionChecker(input.source)\r\n : () => false;\r\n\r\n const diagnostics: Diagnostic[] = [];\r\n\r\n for (const rule of selectedRules) {\r\n if (input.lsp && rule.lspEnabled === false) continue;\r\n if (categorySet && !categorySet.has(rule.category)) continue;\r\n\r\n const severity = effectiveSeverity(rule.severity, rule.id, input.config);\r\n\r\n if (!severity) continue;\r\n\r\n const findings = rule.run(context);\r\n\r\n for (const finding of findings) {\r\n const configuredSeverity = input.config.rules?.[rule.id];\r\n\r\n const diagnostic = toDiagnostic(\r\n file,\r\n rule.id,\r\n rule.category,\r\n severity,\r\n {\r\n ...finding,\r\n\r\n severity:\r\n configuredSeverity && configuredSeverity !== \"off\"\r\n ? severity\r\n : finding.severity,\r\n },\r\n );\r\n\r\n if (\r\n SEVERITY_RANK[diagnostic.severity] < SEVERITY_RANK[input.minSeverity]\r\n )\r\n continue;\r\n\r\n if (isSuppressed(diagnostic.rule, diagnostic.location.line)) continue;\r\n\r\n diagnostics.push(diagnostic);\r\n }\r\n\r\n if (rule.id === \"react-luau/parse-error\" && findings.length > 0) break;\r\n }\r\n\r\n const filteredDiagnostics = removeSupersededDiagnostics(diagnostics);\r\n\r\n return {\r\n relativePath: input.relativePath,\r\n isReactFile: model.isReactFile,\r\n scanned: true,\r\n diagnostics: filteredDiagnostics,\r\n };\r\n } finally {\r\n if (!tree) parsedTree.delete?.();\r\n }\r\n}\r\n",
45
+ "import { spawnSync } from \"node:child_process\";\r\nimport fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport type { ScanFileInput, ScanScope } from \"./types\";\r\n\r\nexport const gitExecutable = (() => {\r\n const executable = Bun.which(\"git\") ?? \"git\";\r\n if (process.platform !== \"win32\" || !/[\\\\/](?:cmd|bin)[\\\\/]git\\.exe$/i.test(executable)) return executable;\r\n const direct = path.resolve(path.dirname(executable), \"..\", \"mingw64\", \"bin\", \"git.exe\");\r\n return fs.existsSync(direct) ? direct : executable;\r\n})();\r\n\r\nexport interface LineRange {\r\n start: number;\r\n end: number;\r\n}\r\n\r\nexport interface GitScopeOptions {\r\n scope: Exclude<ScanScope, \"full\">;\r\n base?: string;\r\n includeUntracked?: boolean;\r\n staged?: boolean;\r\n changedFilesFrom?: string;\r\n}\r\n\r\nexport interface GitScopePlan {\r\n repoRoot: string;\r\n scanRoot: string;\r\n base: string;\r\n changedFiles: string[];\r\n currentFiles: ScanFileInput[];\r\n baselineFiles: ScanFileInput[];\r\n changedLines: Map<string, LineRange[]>;\r\n baselinePaths: Map<string, string>;\r\n}\r\n\r\ninterface GitResult {\r\n status: number;\r\n stdout: string;\r\n stderr: string;\r\n}\r\n\r\nfunction runGit(cwd: string, args: string[], allowFailure = false): GitResult {\r\n const result = spawnSync(gitExecutable, args, {\r\n cwd,\r\n encoding: \"utf8\",\r\n maxBuffer: 64 * 1024 * 1024,\r\n windowsHide: true,\r\n });\r\n\r\n if (result.error) {\r\n if (allowFailure) return { status: 1, stdout: \"\", stderr: result.error.message };\r\n throw new Error(`git ${args[0] ?? \"\"} failed: ${result.error.message}`);\r\n }\r\n\r\n const status = result.status ?? 1;\r\n const stdout = result.stdout ?? \"\";\r\n const stderr = result.stderr ?? \"\";\r\n if (status !== 0 && !allowFailure) {\r\n const detail = stderr.trim() || stdout.trim() || `exit code ${status}`;\r\n throw new Error(`git ${args[0] ?? \"\"} failed: ${detail}`);\r\n }\r\n return { status, stdout, stderr };\r\n}\r\n\r\nfunction normalize(value: string): string {\r\n return value.split(path.sep).join(\"/\");\r\n}\r\n\r\nfunction isInside(parent: string, child: string): boolean {\r\n const relative = path.relative(parent, child);\r\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\r\n}\r\n\r\nfunction isLuauFile(filename: string): boolean {\r\n return filename.endsWith(\".lua\") || filename.endsWith(\".luau\");\r\n}\r\n\r\nfunction lines(output: string): string[] {\r\n return output\r\n .split(/\\r?\\n/)\r\n .map((line) => line.trim())\r\n .filter(Boolean);\r\n}\r\n\r\nexport function findGitRoot(cwd: string): string {\r\n const result = runGit(cwd, [\"rev-parse\", \"--show-toplevel\"], true);\r\n if (result.status !== 0) throw new Error(`Git scope requires a git repository: ${cwd}`);\r\n return path.resolve(result.stdout.trim());\r\n}\r\n\r\nfunction verifyCommit(repoRoot: string, ref: string): string | null {\r\n if (ref.startsWith(\"-\")) throw new Error(`Invalid git ref: ${ref}`);\r\n const result = runGit(repoRoot, [\"rev-parse\", \"--verify\", \"--quiet\", `${ref}^{commit}`], true);\r\n return result.status === 0 ? result.stdout.trim() : null;\r\n}\r\n\r\nfunction mergeBase(repoRoot: string, left: string, right = \"HEAD\"): string | null {\r\n const result = runGit(repoRoot, [\"merge-base\", left, right], true);\r\n return result.status === 0 ? result.stdout.trim() : null;\r\n}\r\n\r\nexport function resolveGitBase(repoRoot: string, requested?: string): string {\r\n const gitLab = process.env.GITLAB_CI === \"true\";\r\n const baseRef = requested ?? (gitLab ? process.env.CI_MERGE_REQUEST_DIFF_BASE_SHA?.trim() : undefined);\r\n\r\n if (baseRef) {\r\n if (baseRef.startsWith(\"-\")) throw new Error(`Invalid git ref: ${baseRef}`);\r\n const base = mergeBase(repoRoot, baseRef);\r\n if (base) return base;\r\n const commit = verifyCommit(repoRoot, baseRef);\r\n if (!commit) throw new Error(`Could not resolve git base ref: ${baseRef}`);\r\n return commit;\r\n }\r\n\r\n const environmentBase = process.env.GITHUB_BASE_REF?.trim()\r\n || (gitLab ? process.env.CI_DEFAULT_BRANCH?.trim() : undefined);\r\n const candidates = [\r\n environmentBase ? `origin/${environmentBase}` : null,\r\n environmentBase ?? null,\r\n \"origin/HEAD\",\r\n \"origin/main\",\r\n \"origin/master\",\r\n \"main\",\r\n \"master\",\r\n ].filter((candidate): candidate is string => Boolean(candidate));\r\n\r\n const head = verifyCommit(repoRoot, \"HEAD\");\r\n // Read refs once. Probing each possible branch with a separate Git process is\r\n // particularly expensive on Windows, including for repositories with no remote.\r\n const refs = new Map<string, string>();\r\n for (const line of lines(runGit(repoRoot, [\"show-ref\"], true).stdout)) {\r\n const match = line.match(/^([0-9a-f]+) (refs\\/\\S+)$/i);\r\n if (match) refs.set(match[2], match[1]);\r\n }\r\n for (const candidate of [...new Set(candidates)]) {\r\n const commit = refs.get(`refs/remotes/${candidate}`)\r\n ?? refs.get(`refs/heads/${candidate}`)\r\n ?? refs.get(`refs/tags/${candidate}`)\r\n ?? refs.get(candidate);\r\n if (!commit || commit === head) continue;\r\n const base = mergeBase(repoRoot, commit);\r\n if (base) return base;\r\n }\r\n\r\n return head ?? \"HEAD\";\r\n}\r\n\r\nfunction readChangedFilesFile(filename: string, repoRoot: string): string[] {\r\n let content: string;\r\n try {\r\n content = fs.readFileSync(filename, \"utf8\");\r\n } catch (error) {\r\n const detail = error instanceof Error ? error.message : String(error);\r\n throw new Error(`Could not read --changed-files-from file \"${filename}\": ${detail}`);\r\n }\r\n\r\n return lines(content).map((entry) => {\r\n const absolute = path.isAbsolute(entry) ? path.resolve(entry) : path.resolve(repoRoot, entry);\r\n return normalize(path.relative(repoRoot, absolute));\r\n });\r\n}\r\n\r\nfunction getUntrackedFiles(repoRoot: string): string[] {\r\n return lines(runGit(repoRoot, [\"ls-files\", \"--others\", \"--exclude-standard\"], true).stdout);\r\n}\r\n\r\ninterface ChangedRepoFile {\r\n currentPath: string;\r\n baselinePath: string | null;\r\n}\r\n\r\nfunction parseNameStatusZ(output: string): ChangedRepoFile[] {\r\n const fields = output.split(\"\\0\");\r\n const changed: ChangedRepoFile[] = [];\r\n for (let index = 0; index < fields.length;) {\r\n const status = fields[index++];\r\n if (!status) continue;\r\n if (status.startsWith(\"R\") || status.startsWith(\"C\")) {\r\n const baselinePath = fields[index++];\r\n const currentPath = fields[index++];\r\n if (baselinePath && currentPath) changed.push({ currentPath: normalize(currentPath), baselinePath: normalize(baselinePath) });\r\n continue;\r\n }\r\n const currentPath = fields[index++];\r\n if (!currentPath) continue;\r\n changed.push({\r\n currentPath: normalize(currentPath),\r\n baselinePath: status.startsWith(\"A\") ? null : normalize(currentPath),\r\n });\r\n }\r\n return changed;\r\n}\r\n\r\nfunction getChangedRepoFiles(\r\n repoRoot: string,\r\n base: string,\r\n options: Pick<GitScopeOptions, \"includeUntracked\" | \"staged\" | \"changedFilesFrom\">,\r\n): ChangedRepoFile[] {\r\n let changed: ChangedRepoFile[];\r\n\r\n if (options.changedFilesFrom) {\r\n changed = readChangedFilesFile(path.resolve(process.cwd(), options.changedFilesFrom), repoRoot).map((currentPath) => ({\r\n currentPath: normalize(currentPath),\r\n baselinePath: normalize(currentPath),\r\n }));\r\n } else {\r\n const args = options.staged\r\n ? [\"diff\", \"--cached\", \"--name-status\", \"-z\", \"--find-renames\", \"--diff-filter=ACDMR\", \"--\"]\r\n : [\"diff\", \"--name-status\", \"-z\", \"--find-renames\", \"--diff-filter=ACDMR\", base, \"--\"];\r\n changed = parseNameStatusZ(runGit(repoRoot, args).stdout);\r\n }\r\n\r\n if (options.includeUntracked && !options.staged) {\r\n changed.push(...getUntrackedFiles(repoRoot).map((currentPath) => ({ currentPath: normalize(currentPath), baselinePath: null })));\r\n }\r\n\r\n const byCurrentPath = new Map<string, ChangedRepoFile>();\r\n for (const entry of changed) byCurrentPath.set(entry.currentPath, entry);\r\n return [...byCurrentPath.values()].sort((a, b) => a.currentPath.localeCompare(b.currentPath));\r\n}\r\n\r\nfunction readGitObject(repoRoot: string, objectSpec: string): string | null {\r\n const result = runGit(repoRoot, [\"show\", objectSpec], true);\r\n return result.status === 0 ? result.stdout : null;\r\n}\r\n\r\nfunction readGitObjects(repoRoot: string, objectSpecs: string[]): Map<string, string | null> {\r\n const unique = [...new Set(objectSpecs)];\r\n const values = new Map<string, string | null>();\r\n if (unique.length === 0) return values;\r\n\r\n const result = spawnSync(gitExecutable, [\"cat-file\", \"--batch\", \"-z\"], {\r\n cwd: repoRoot,\r\n input: `${unique.join(\"\\0\")}\\0`,\r\n encoding: null,\r\n maxBuffer: 256 * 1024 * 1024,\r\n windowsHide: true,\r\n });\r\n if (result.error || (result.status ?? 1) !== 0 || !Buffer.isBuffer(result.stdout)) {\r\n // Fall back to individual reads if a Git version or unusual object name does\r\n // not support the batch path. Correctness is more important than the speedup.\r\n for (const spec of unique) values.set(spec, readGitObject(repoRoot, spec));\r\n return values;\r\n }\r\n\r\n const output = result.stdout;\r\n let offset = 0;\r\n let parseFailed = false;\r\n for (const spec of unique) {\r\n const lineEnd = output.indexOf(0x0a, offset);\r\n if (lineEnd < 0) {\r\n parseFailed = true;\r\n break;\r\n }\r\n const header = output.subarray(offset, lineEnd).toString(\"utf8\");\r\n offset = lineEnd + 1;\r\n if (header.endsWith(\" missing\")) {\r\n values.set(spec, null);\r\n continue;\r\n }\r\n\r\n const match = header.match(/^[0-9a-f]+\\s+\\S+\\s+(\\d+)$/i);\r\n if (!match) {\r\n parseFailed = true;\r\n break;\r\n }\r\n const size = Number(match[1]);\r\n const end = offset + size;\r\n if (!Number.isSafeInteger(size) || size < 0 || end > output.length) {\r\n parseFailed = true;\r\n break;\r\n }\r\n values.set(spec, output.subarray(offset, end).toString(\"utf8\"));\r\n offset = end;\r\n if (output[offset] === 0x0a) offset += 1;\r\n }\r\n\r\n if (parseFailed) {\r\n values.clear();\r\n for (const spec of unique) values.set(spec, readGitObject(repoRoot, spec));\r\n }\r\n return values;\r\n}\r\n\r\nfunction currentSource(repoRoot: string, repoRelativePath: string, staged: boolean): string | null {\r\n if (staged) return readGitObject(repoRoot, `:${repoRelativePath}`);\r\n const absolute = path.join(repoRoot, ...repoRelativePath.split(\"/\"));\r\n if (!fs.existsSync(absolute) || !fs.statSync(absolute).isFile()) return null;\r\n return fs.readFileSync(absolute, \"utf8\");\r\n}\r\n\r\nfunction parseChangedLineRanges(diff: string): LineRange[] {\r\n const ranges: LineRange[] = [];\r\n for (const line of diff.split(/\\r?\\n/)) {\r\n const match = line.match(/^@@\\s+-\\d+(?:,\\d+)?\\s+\\+(\\d+)(?:,(\\d+))?\\s+@@/);\r\n if (!match) continue;\r\n const start = Number(match[1]);\r\n const count = match[2] === undefined ? 1 : Number(match[2]);\r\n if (count <= 0) continue;\r\n ranges.push({ start, end: start + count - 1 });\r\n }\r\n return ranges;\r\n}\r\n\r\nfunction lineRangesForFile(repoRoot: string, base: string, repoRelativePath: string, staged: boolean, source: string): LineRange[] {\r\n const args = staged\r\n ? [\"diff\", \"--cached\", \"--unified=0\", \"--no-color\", \"--\", repoRelativePath]\r\n : [\"diff\", \"--unified=0\", \"--no-color\", base, \"--\", repoRelativePath];\r\n const diff = runGit(repoRoot, args, true).stdout;\r\n const ranges = parseChangedLineRanges(diff);\r\n if (ranges.length > 0) return ranges;\r\n\r\n const tracked = runGit(repoRoot, [\"ls-files\", \"--error-unmatch\", \"--\", repoRelativePath], true).status === 0;\r\n if (!tracked) {\r\n const lineCount = Math.max(1, source.split(/\\r?\\n/).length);\r\n return [{ start: 1, end: lineCount }];\r\n }\r\n return [];\r\n}\r\n\r\nexport function createGitScopePlan(scanRootInput: string, options: GitScopeOptions, relativeRootInput = scanRootInput): GitScopePlan {\r\n const scanRoot = path.resolve(scanRootInput);\r\n const relativeRoot = path.resolve(relativeRootInput);\r\n const repoRoot = findGitRoot(scanRoot);\r\n const base = resolveGitBase(repoRoot, options.base);\r\n const repoFiles = getChangedRepoFiles(repoRoot, base, options);\r\n const currentFiles: ScanFileInput[] = [];\r\n const baselineFiles: ScanFileInput[] = [];\r\n const changedLines = new Map<string, LineRange[]>();\r\n const changedFiles: string[] = [];\r\n const baselinePaths = new Map<string, string>();\r\n const stagedSources = options.staged\r\n ? readGitObjects(repoRoot, repoFiles.map((file) => `:${file.currentPath}`))\r\n : new Map<string, string | null>();\r\n const baselineSources = options.scope === \"changed\"\r\n ? readGitObjects(\r\n repoRoot,\r\n repoFiles\r\n .filter((file) => file.baselinePath !== null)\r\n .map((file) => `${base}:${file.baselinePath}`),\r\n )\r\n : new Map<string, string | null>();\r\n\r\n for (const repoFile of repoFiles) {\r\n const repoRelativePath = repoFile.currentPath;\r\n if (!isLuauFile(repoRelativePath)) continue;\r\n const absolutePath = path.resolve(repoRoot, ...repoRelativePath.split(\"/\"));\r\n if (!isInside(scanRoot, absolutePath)) continue;\r\n\r\n const source = options.staged\r\n ? stagedSources.get(`:${repoRelativePath}`) ?? null\r\n : currentSource(repoRoot, repoRelativePath, false);\r\n const relativePath = normalize(path.relative(relativeRoot, absolutePath));\r\n if (repoFile.baselinePath !== null) {\r\n baselinePaths.set(\r\n relativePath,\r\n normalize(path.relative(relativeRoot, path.resolve(repoRoot, repoFile.baselinePath))),\r\n );\r\n }\r\n\r\n changedFiles.push(relativePath);\r\n if (source !== null) currentFiles.push({ absolutePath, relativePath, source, forceScan: false });\r\n\r\n const baseline = options.scope !== \"changed\" || repoFile.baselinePath === null\r\n ? null\r\n : baselineSources.get(`${base}:${repoFile.baselinePath}`) ?? null;\r\n if (options.scope === \"changed\" && repoFile.baselinePath !== null && baseline === null) {\r\n throw new Error(`Could not read baseline source for ${repoFile.baselinePath}`);\r\n }\r\n\r\n if (baseline !== null) baselineFiles.push({ absolutePath, relativePath, source: baseline, forceScan: false });\r\n\r\n if (options.scope === \"lines\" && source !== null) {\r\n changedLines.set(relativePath, lineRangesForFile(repoRoot, base, repoRelativePath, Boolean(options.staged), source));\r\n }\r\n }\r\n\r\n return {\r\n repoRoot,\r\n scanRoot,\r\n base,\r\n changedFiles: [...new Set(changedFiles)].sort(),\r\n currentFiles,\r\n baselineFiles,\r\n changedLines,\r\n baselinePaths,\r\n };\r\n}\r\n",
46
+ "import packageJson from \"../package.json\";\r\nimport type { Diagnostic, RuleDefinition, ScanReport, Severity } from \"./types\";\r\n\r\nconst VERSION = packageJson.version;\r\n\r\nconst SYMBOLS: Record<Severity, string> = {\r\n error: \"x\",\r\n warning: \"!\",\r\n suggestion: \"i\",\r\n};\r\n\r\nconst ANSI = {\r\n reset: \"\\u001b[0m\",\r\n bold: \"\\u001b[1m\",\r\n dim: \"\\u001b[2m\",\r\n red: \"\\u001b[31m\",\r\n yellow: \"\\u001b[33m\",\r\n cyan: \"\\u001b[36m\",\r\n green: \"\\u001b[32m\",\r\n magenta: \"\\u001b[35m\",\r\n};\r\n\r\nfunction paint(value: string, ...codes: string[]): string {\r\n return `${codes.join(\"\")}${value}${ANSI.reset}`;\r\n}\r\n\r\nfunction severityPaint(severity: Severity, value: string): string {\r\n if (severity === \"error\") return paint(value, ANSI.bold, ANSI.red);\r\n if (severity === \"warning\") return paint(value, ANSI.bold, ANSI.yellow);\r\n return paint(value, ANSI.bold, ANSI.magenta);\r\n}\r\n\r\nexport function scoreLabel(score: number): string {\r\n if (score >= 90) return \"Excellent\";\r\n if (score >= 75) return \"Good\";\r\n if (score >= 50) return \"Needs work\";\r\n return \"Critical\";\r\n}\r\n\r\nfunction scorePaint(score: number, value: string): string {\r\n if (score >= 75) return paint(value, ANSI.bold, ANSI.green);\r\n if (score >= 50) return paint(value, ANSI.bold, ANSI.yellow);\r\n return paint(value, ANSI.bold, ANSI.red);\r\n}\r\n\r\nfunction terminalWidth(value: number): number {\r\n return Math.max(32, value || 120);\r\n}\r\n\r\nfunction wrapWords(value: string, width: number): string[] {\r\n const normalized = value.trim().replace(/\\s+/g, \" \");\r\n if (!normalized) return [\"\"];\r\n if (width <= 1) return [normalized];\r\n\r\n const lines: string[] = [];\r\n let line = \"\";\r\n for (const word of normalized.split(\" \")) {\r\n if (!line) {\r\n line = word;\r\n continue;\r\n }\r\n if (line.length + 1 + word.length <= width) {\r\n line += ` ${word}`;\r\n continue;\r\n }\r\n lines.push(line);\r\n line = word;\r\n }\r\n if (line) lines.push(line);\r\n return lines;\r\n}\r\n\r\nfunction wrapFirstThen(value: string, firstWidth: number, continuationWidth: number): string[] {\r\n const normalized = value.trim().replace(/\\s+/g, \" \");\r\n if (!normalized) return [\"\"];\r\n\r\n const words = normalized.split(\" \");\r\n const lines: string[] = [];\r\n let width = Math.max(1, firstWidth);\r\n let line = \"\";\r\n\r\n for (const word of words) {\r\n if (!line) {\r\n line = word;\r\n continue;\r\n }\r\n if (line.length + 1 + word.length <= width) {\r\n line += ` ${word}`;\r\n continue;\r\n }\r\n lines.push(line);\r\n line = word;\r\n width = Math.max(1, continuationWidth);\r\n }\r\n if (line) lines.push(line);\r\n return lines;\r\n}\r\n\r\nfunction renderDiagnosticLines(diagnostic: Diagnostic, colorized: boolean, width: number, baseIndent = \" \"): string[] {\r\n const symbol = SYMBOLS[diagnostic.severity];\r\n const location = `${diagnostic.file}:${diagnostic.location.line}:${diagnostic.location.column}`;\r\n const prefixVisible = baseIndent.length + symbol.length + 1 + location.length + 2;\r\n const continuationIndent = \" \";\r\n const continuationWidth = Math.max(16, width - continuationIndent.length);\r\n const firstWidth = width - prefixVisible;\r\n const splitMessage = firstWidth < 24;\r\n const messageLines = splitMessage\r\n ? wrapWords(diagnostic.message, continuationWidth)\r\n : wrapFirstThen(diagnostic.message, firstWidth, continuationWidth);\r\n const rendered: string[] = [];\r\n\r\n const symbolText = colorized ? severityPaint(diagnostic.severity, symbol) : symbol;\r\n const locationText = colorized ? paint(location, ANSI.bold) : location;\r\n\r\n if (splitMessage) {\r\n rendered.push(`${baseIndent}${symbolText} ${locationText}`);\r\n for (const messageLine of messageLines) rendered.push(`${continuationIndent}${messageLine}`);\r\n return rendered;\r\n }\r\n\r\n rendered.push(`${baseIndent}${symbolText} ${locationText} ${messageLines[0]}`);\r\n for (const messageLine of messageLines.slice(1)) rendered.push(`${continuationIndent}${messageLine}`);\r\n return rendered;\r\n}\r\n\r\nfunction renderIndentedWrapped(value: string, colorized: boolean, width: number, indent = \" \"): string[] {\r\n const wrapped = wrapWords(value, Math.max(16, width - indent.length));\r\n return wrapped.map((line) => `${indent}${colorized ? paint(line, ANSI.dim) : line}`);\r\n}\r\n\r\nexport function renderRulesList(\r\n ruleDefinitions: RuleDefinition[],\r\n terminalWidth = 120,\r\n severityOverrides: ReadonlyMap<string, string> = new Map(),\r\n colorized = false,\r\n): string {\r\n const title = colorized ? paint(\"React-Luau Doctor Rules\", ANSI.bold, ANSI.magenta) : \"React-Luau Doctor Rules\";\r\n if (ruleDefinitions.length === 0) return `${title}\\n0 rules`;\r\n\r\n const ruleWidth = Math.max(\"Rule ID\".length, ...ruleDefinitions.map((rule) => rule.id.length));\r\n const severityWidth = Math.max(\r\n \"Severity\".length,\r\n ...ruleDefinitions.map((rule) => (severityOverrides.get(rule.id) ?? rule.severity).length),\r\n );\r\n const categoryWidth = Math.max(\"Category\".length, ...ruleDefinitions.map((rule) => rule.category.length));\r\n const gap = \" \";\r\n const fixedWidth = ruleWidth + severityWidth + categoryWidth + gap.length * 3;\r\n const tableWidth = Math.max(96, Math.min(160, terminalWidth || 120));\r\n const descriptionWidth = Math.max(28, tableWidth - fixedWidth);\r\n const descriptionIndent = \" \".repeat(fixedWidth);\r\n\r\n const header = `${\"Rule ID\".padEnd(ruleWidth)}${gap}${\"Severity\".padEnd(severityWidth)}${gap}${\"Category\".padEnd(categoryWidth)}${gap}Description`;\r\n const separator = `${\"-\".repeat(ruleWidth)}${gap}${\"-\".repeat(severityWidth)}${gap}${\"-\".repeat(categoryWidth)}${gap}${\"-\".repeat(descriptionWidth)}`;\r\n const lines: string[] = [title, `${ruleDefinitions.length} rules`, \"\", colorized ? paint(header, ANSI.bold) : header, colorized ? paint(separator, ANSI.dim) : separator];\r\n\r\n for (const rule of ruleDefinitions) {\r\n const severity = severityOverrides.get(rule.id) ?? rule.severity;\r\n const descriptionLines = wrapWords(rule.description, descriptionWidth);\r\n const ruleCell = rule.id.padEnd(ruleWidth);\r\n const severityCell = severity.padEnd(severityWidth);\r\n const categoryCell = rule.category.padEnd(categoryWidth);\r\n const firstLine = colorized\r\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]}`\r\n : `${ruleCell}${gap}${severityCell}${gap}${categoryCell}${gap}${descriptionLines[0]}`;\r\n lines.push(firstLine);\r\n for (const continuation of descriptionLines.slice(1)) {\r\n lines.push(colorized ? `${descriptionIndent}${paint(continuation, ANSI.dim)}` : `${descriptionIndent}${continuation}`);\r\n }\r\n }\r\n\r\n return lines.join(\"\\n\");\r\n}\r\n\r\nfunction renderCounts(report: ScanReport, colorized: boolean): string {\r\n if (!colorized) {\r\n return `${report.counts.error} errors, ${report.counts.warning} warnings, ${report.counts.suggestion} suggestions`;\r\n }\r\n return [\r\n severityPaint(\"error\", `${report.counts.error} errors`),\r\n severityPaint(\"warning\", `${report.counts.warning} warnings`),\r\n severityPaint(\"suggestion\", `${report.counts.suggestion} suggestions`),\r\n ].join(\", \");\r\n}\r\n\r\nfunction renderHeader(report: ScanReport, colorized: boolean): string[] {\r\n const title = colorized\r\n ? `${paint(\"React-Luau Doctor\", ANSI.bold, ANSI.magenta)} ${paint(`v${VERSION}`, ANSI.dim)}`\r\n : `React-Luau Doctor v${VERSION}`;\r\n const scopeSuffix = report.scope && report.scope !== \"full\" ? ` (${report.scope} scope)` : \"\";\r\n const lines = [title, `Scanned ${report.scannedFiles} React-Luau files in ${report.durationMs.toFixed(2)}ms${scopeSuffix}`];\r\n if (report.partial) {\r\n const message = `Partial scan: ${(report.skippedFiles ?? []).length} candidate files skipped after the time budget.`;\r\n lines.push(colorized ? severityPaint(\"warning\", message) : message);\r\n }\r\n return lines;\r\n}\r\n\r\nfunction renderVerboseDiagnostics(report: ScanReport, colorized: boolean, width: number): string[] {\r\n if (report.diagnostics.length === 0) {\r\n return [colorized ? paint(\"No issues found.\", ANSI.bold, ANSI.green) : \"No issues found.\"];\r\n }\r\n\r\n const lines: string[] = [];\r\n let currentFile = \"\";\r\n for (const diagnostic of report.diagnostics) {\r\n if (diagnostic.file !== currentFile) {\r\n if (currentFile) lines.push(\"\");\r\n currentFile = diagnostic.file;\r\n lines.push(colorized ? paint(currentFile, ANSI.bold, ANSI.cyan) : currentFile);\r\n }\r\n lines.push(...renderDiagnosticLines(diagnostic, colorized, width));\r\n const metadata = `${diagnostic.rule} [${diagnostic.category}]`;\r\n lines.push(...renderIndentedWrapped(metadata, colorized, width));\r\n if (diagnostic.help) lines.push(...renderIndentedWrapped(diagnostic.help, colorized, width));\r\n }\r\n return lines;\r\n}\r\n\r\ninterface RuleGroup {\r\n rule: string;\r\n category: string;\r\n severity: Severity;\r\n diagnostics: Diagnostic[];\r\n}\r\n\r\nfunction groupedDiagnostics(report: ScanReport): RuleGroup[] {\r\n const groups = new Map<string, RuleGroup>();\r\n const rank: Record<Severity, number> = { error: 2, warning: 1, suggestion: 0 };\r\n for (const diagnostic of report.diagnostics) {\r\n const existing = groups.get(diagnostic.rule);\r\n if (existing) {\r\n existing.diagnostics.push(diagnostic);\r\n if (rank[diagnostic.severity] > rank[existing.severity]) existing.severity = diagnostic.severity;\r\n } else {\r\n groups.set(diagnostic.rule, {\r\n rule: diagnostic.rule,\r\n category: diagnostic.category,\r\n severity: diagnostic.severity,\r\n diagnostics: [diagnostic],\r\n });\r\n }\r\n }\r\n return [...groups.values()].sort(\r\n (a, b) => rank[b.severity] - rank[a.severity] || b.diagnostics.length - a.diagnostics.length || a.rule.localeCompare(b.rule),\r\n );\r\n}\r\n\r\nfunction renderCompactDiagnostics(report: ScanReport, colorized: boolean, width: number): string[] {\r\n if (report.diagnostics.length === 0) {\r\n return [colorized ? paint(\"No issues found.\", ANSI.bold, ANSI.green) : \"No issues found.\"];\r\n }\r\n\r\n const groups = groupedDiagnostics(report);\r\n const shown = groups.slice(0, 3);\r\n const lines: string[] = [\"Top rules:\"];\r\n let shownFindings = 0;\r\n\r\n for (const group of shown) {\r\n shownFindings += group.diagnostics.length;\r\n const symbol = colorized ? severityPaint(group.severity, SYMBOLS[group.severity]) : SYMBOLS[group.severity];\r\n const countLabel = `${group.diagnostics.length} finding${group.diagnostics.length === 1 ? \"\" : \"s\"}`;\r\n const ruleLabel = colorized ? paint(group.rule, ANSI.bold) : group.rule;\r\n const metadata = colorized ? paint(`[${group.category}]`, ANSI.dim) : `[${group.category}]`;\r\n lines.push(`${symbol} ${ruleLabel} ${metadata} ${countLabel}`);\r\n\r\n for (const diagnostic of group.diagnostics.slice(0, 3)) {\r\n const location = `${diagnostic.file}:${diagnostic.location.line}:${diagnostic.location.column}`;\r\n const detail = `${location} ${diagnostic.message}`;\r\n const wrapped = wrapWords(detail, Math.max(16, width - 4));\r\n for (const line of wrapped) lines.push(colorized ? ` ${paint(line, ANSI.dim)}` : ` ${line}`);\r\n }\r\n if (group.diagnostics.length > 3) lines.push(` +${group.diagnostics.length - 3} more`);\r\n }\r\n\r\n const hiddenRules = groups.length - shown.length;\r\n const hiddenFindings = report.diagnostics.length - shownFindings;\r\n if (hiddenRules > 0 || hiddenFindings > 0) {\r\n lines.push(\"\");\r\n lines.push(`+${hiddenRules} more rules and ${hiddenFindings} more findings. Run react-luau-doctor --verbose for every finding.`);\r\n }\r\n return lines;\r\n}\r\n\r\nexport function renderTextReport(\r\n report: ScanReport,\r\n showScore = true,\r\n colorized = false,\r\n verbose = true,\r\n outputWidth = 120,\r\n): string {\r\n const width = terminalWidth(outputWidth);\r\n const lines = renderHeader(report, colorized);\r\n lines.push(\"\");\r\n lines.push(...(verbose ? renderVerboseDiagnostics(report, colorized, width) : renderCompactDiagnostics(report, colorized, width)));\r\n lines.push(\"\");\r\n lines.push(renderCounts(report, colorized));\r\n if (showScore) {\r\n const score = `Score: ${report.score}/100 (${scoreLabel(report.score)})`;\r\n lines.push(colorized ? scorePaint(report.score, score) : score);\r\n }\r\n if (report.notes && report.notes.length > 0) {\r\n lines.push(\"\");\r\n for (const note of report.notes) {\r\n const wrapped = wrapWords(`Note: ${note}`, width);\r\n for (const line of wrapped) lines.push(colorized ? paint(line, ANSI.dim) : line);\r\n }\r\n }\r\n return lines.join(\"\\n\");\r\n}\r\n\r\nfunction escapeWorkflowData(value: string): string {\r\n return value.replace(/%/g, \"%25\").replace(/\\r/g, \"%0D\").replace(/\\n/g, \"%0A\");\r\n}\r\n\r\nfunction escapeWorkflowProperty(value: string): string {\r\n return escapeWorkflowData(value).replace(/:/g, \"%3A\").replace(/,/g, \"%2C\");\r\n}\r\n\r\nexport function renderAnnotations(report: ScanReport): string {\r\n return report.diagnostics\r\n .map((diagnostic) => {\r\n const level = diagnostic.severity === \"error\" ? \"error\" : \"warning\";\r\n const properties = [\r\n `file=${escapeWorkflowProperty(diagnostic.file)}`,\r\n `line=${diagnostic.location.line}`,\r\n `col=${diagnostic.location.column}`,\r\n `endLine=${diagnostic.location.endLine}`,\r\n `endColumn=${diagnostic.location.endColumn}`,\r\n `title=${escapeWorkflowProperty(diagnostic.rule)}`,\r\n ].join(\",\");\r\n return `::${level} ${properties}::${escapeWorkflowData(diagnostic.message)}`;\r\n })\r\n .join(\"\\n\");\r\n}\r\n",
47
+ "import { scoreLabel } from \"../reporter\";\nimport type { Diagnostic, ScanReport } from \"../types\";\n\nexport const SUMMARY_MARKER = \"<!-- react-luau-doctor:summary -->\";\nexport const REVIEW_MARKER = \"<!-- react-luau-doctor:review -->\";\nexport const SUCCESS_ICON =\n '<img src=\"https://raw.githubusercontent.com/ColRealPro/react-luau-doctor/main/assets/ci/check-circle.svg\" width=\"14\" height=\"14\" alt=\"\">';\nexport const MAX_COMMENT_LENGTH = 60_000;\n\nexport interface FixedDiagnostic extends Diagnostic {\n baselineLocationUncertain?: boolean;\n}\n\nexport function escapeMarkdown(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/[\\\\`*_{}\\[\\]()!|#$~]/g, \"\\\\$&\")\n .replace(/\\r?\\n/g, \" \");\n}\n\nexport function inlineCode(value: string): string {\n const text = value.replace(/\\r?\\n/g, \" \");\n const fence = \"`\".repeat(\n Math.max(0, ...[...text.matchAll(/`+/g)].map((match) => match[0].length)) + 1,\n );\n const padding =\n text.startsWith(\"`\") || text.endsWith(\"`\") || (text.startsWith(\" \") && text.endsWith(\" \"))\n ? \" \"\n : \"\";\n\n return `${fence}${padding}${text}${padding}${fence}`;\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\");\n}\n\nexport function issueCount(count: number): string {\n return `${count} ${count === 1 ? \"issue\" : \"issues\"}`;\n}\n\nfunction statusText(kind: \"fixed\" | \"remaining\" | \"discussion\", text: string): string {\n let rendered = kind === \"fixed\" ? `**${escapeMarkdown(text)}**` : escapeMarkdown(text);\n\n // turns out mathjax isn't supported outside of the github website :(\n // const colors = { fixed: \"#3fb950\", remaining: \"#8b949e\", discussion: \"#d29922\" };\n // function escapeMathText(value: string): string {\n // const symbols: Record<string, string> = {\n // \"\\\\\": \"\\\\textbackslash{}\", \"^\": \"\\\\textasciicircum{}\", \"~\": \"\\\\textasciitilde{}\",\n // \"<\": \"\\\\textless{}\", \">\": \"\\\\textgreater{}\",\n // };\n // const text = value\n // .replace(/\\r?\\n/g, \" \")\n // .replace(/[\\\\{}$%&#_^~<>]/g, (symbol) => symbols[symbol] ?? `\\\\${symbol}`);\n // // Preserve literal text through Markdown parsing before MathJax consumes the decoded HTML text\n // return text.replace(/[\\\\$`*\\[\\]()!|_&]/g, (symbol) => `&#${symbol.charCodeAt(0)};`);\n // }\n // rendered = `$\\\\color{${colors[kind]}}\\\\textsf{${escapeMathText(text)}}$`;\n\n return rendered;\n}\n\nexport function renderReviewProgress(\n total: number,\n fixed: number,\n unknown: number,\n discussions?: number,\n): string {\n const lines = [`**React-Luau Doctor found ${total} new ${total === 1 ? \"issue\" : \"issues\"}**`];\n const status: string[] = [];\n\n if (unknown > 0) {\n status.push(`${unknown} ${unknown === 1 ? \"issue\" : \"issues\"} awaiting verification`);\n }\n\n if (discussions === undefined && fixed > 0) {\n status.push(\"discussion status unavailable\");\n }\n\n const discussion = discussions\n ? `${discussions} ${discussions === 1 ? \"discussion\" : \"discussions\"} awaiting resolution`\n : \"\";\n\n if (fixed > 0) {\n let fixedText = `${fixed} of these ${issueCount(total)} fixed`;\n\n if (fixed === total) {\n if (total === 1) {\n fixedText = \"This issue fixed in later commits\";\n } else if (total === 2) {\n fixedText = \"Both issues fixed in later commits\";\n } else {\n fixedText = `All ${total} issues fixed in later commits`;\n }\n }\n\n const remaining = total - fixed - unknown;\n\n if (remaining > 0) {\n status.unshift(`${remaining} still ${remaining === 1 ? \"remains\" : \"remain\"} in the PR`);\n }\n\n lines.push(\n \"\",\n [\n `${SUCCESS_ICON} ${statusText(\"fixed\", fixedText)}`,\n status.length ? statusText(\"remaining\", `· ${status.join(\" · \")}`) : \"\",\n discussion ? statusText(\"discussion\", `· ${discussion}`) : \"\",\n ]\n .filter(Boolean)\n .join(\" \"),\n );\n } else if (status.length || discussion) {\n lines.push(\n \"\",\n [\n status.length ? statusText(\"remaining\", status.join(\" · \")) : \"\",\n discussion ? statusText(\"discussion\", `${status.length ? \"· \" : \"\"}${discussion}`) : \"\",\n ]\n .filter(Boolean)\n .join(\" \"),\n );\n }\n\n return lines.join(\"\\n\");\n}\n\nexport interface SummaryOptions {\n baseBranch: string;\n fixed: FixedDiagnostic[];\n url: (diagnostic: Diagnostic, baseline: boolean) => string;\n sha: string;\n inlineCount: number;\n runUrl?: string | null;\n incomplete?: boolean;\n skipped?: boolean;\n limit?: number;\n includeDiagnosticDetails?: boolean;\n}\n\nfunction ordered(diagnostics: Diagnostic[]): Diagnostic[] {\n return [...diagnostics].sort(\n (a, b) =>\n a.file.localeCompare(b.file) ||\n a.location.line - b.location.line ||\n a.rule.localeCompare(b.rule) ||\n a.message.localeCompare(b.message),\n );\n}\n\nfunction diagnosticDetails(diagnostic: Diagnostic): string {\n const details = [diagnostic.help, diagnostic.explanation, diagnostic.caveat].filter(\n (value): value is string => Boolean(value) && value !== diagnostic.message,\n );\n\n return details.length ? `\\n ${[...new Set(details)].map(escapeMarkdown).join(\" · \")}` : \"\";\n}\n\nexport function renderSummaryComment(report: ScanReport, options: SummaryOptions): string {\n const total = report.diagnostics.length;\n const files = new Set(report.diagnostics.map((diagnostic) => diagnostic.file)).size;\n const newLabel = report.scope === \"changed\" ? \"new\" : \"reported\";\n const severity = [\n `${report.counts.error} ${report.counts.error === 1 ? \"error\" : \"errors\"}`,\n `${report.counts.warning} ${report.counts.warning === 1 ? \"warning\" : \"warnings\"}`,\n `${report.counts.suggestion} ${report.counts.suggestion === 1 ? \"suggestion\" : \"suggestions\"}`,\n ].join(\" & \");\n const info = options.incomplete\n ? `score unavailable · fixes unverified · vs ${inlineCode(options.baseBranch)}`\n : `score ${report.score}/100 (${scoreLabel(report.score)}) · ${options.fixed.length} fixed · vs ${inlineCode(options.baseBranch)}`;\n let headline: string;\n\n if (options.incomplete) {\n headline =\n `**React-Luau Doctor analysis incomplete · ${issueCount(total)} reported so far**` +\n \"\\n\\nFindings may be missing and fixes have not been verified\";\n } else if (options.skipped || total === 0) {\n headline = `**React-Luau Doctor found no ${newLabel} issues${newLabel === \"new\" ? \". 🎉\" : \"\"}**`;\n\n if (options.skipped) {\n headline += \"\\n\\nNo eligible React-Luau files changed in this pull request · scan skipped\";\n }\n } else {\n headline =\n `**React-Luau Doctor found ${total} ${newLabel} ${total === 1 ? \"issue\" : \"issues\"}` +\n ` in ${files} ${files === 1 ? \"file\" : \"files\"} · ${severity} · ${info}**`;\n }\n\n const lines = [SUMMARY_MARKER, headline];\n\n if (options.incomplete) {\n lines.push(\"\", `${severity} · ${info}`);\n }\n\n const sections: Array<{\n title: string;\n diagnostics: Diagnostic[];\n icon: string;\n grouped: boolean;\n baseline: boolean;\n }> = [\n {\n title: \"Errors\",\n diagnostics: report.diagnostics.filter((d) => d.severity === \"error\"),\n icon: \"❌\",\n grouped: false,\n baseline: false,\n },\n {\n title: `⚠️ ${report.counts.warning} ${report.counts.warning === 1 ? \"warning\" : \"warnings\"}`,\n diagnostics: report.diagnostics.filter((d) => d.severity === \"warning\"),\n icon: \"⚠️\",\n grouped: true,\n baseline: false,\n },\n {\n title: `💡 ${report.counts.suggestion} ${report.counts.suggestion === 1 ? \"suggestion\" : \"suggestions\"}`,\n diagnostics: report.diagnostics.filter((d) => d.severity === \"suggestion\"),\n icon: \"💡\",\n grouped: true,\n baseline: false,\n },\n {\n title: `${options.fixed.length} fixed vs <code>${escapeHtml(options.baseBranch)}</code>`,\n diagnostics: options.incomplete ? [] : options.fixed,\n icon: SUCCESS_ICON,\n grouped: true,\n baseline: true,\n },\n ];\n const inlineNote =\n options.inlineCount > 0 ? \"See inline comments for fixes\" : \"See this report for findings\";\n const footer =\n \"\\n\\n<sub>Reviewed by [React-Luau Doctor](https://github.com/ColRealPro/react-luau-doctor)\" +\n ` for commit ${inlineCode(options.sha.slice(0, 7))} · ${inlineNote}</sub>\\n`;\n const reportLink = options.runUrl\n ? `[the full workflow report](${options.runUrl})`\n : \"the workflow summary and logs\";\n const overflow =\n \"\\n\\nAdditional findings were omitted from this comment · See \" +\n `${reportLink} for all findings and diagnostic details\\n`;\n const fullLink =\n options.runUrl && (total > 0 || options.fixed.length > 0 || options.incomplete)\n ? `\\n\\n[View full workflow report](${options.runUrl})`\n : \"\";\n const limit = options.limit ?? MAX_COMMENT_LENGTH;\n const reserve = footer.length + Math.max(overflow.length, fullLink.length);\n\n let omitted = false;\n let body = lines.join(\"\\n\");\n\n for (const note of report.notes ?? []) {\n const text = `\\n\\n${escapeMarkdown(note)}`;\n\n if (body.length + text.length + reserve > limit) {\n omitted = true;\n continue;\n }\n\n body += text;\n }\n\n for (const section of sections) {\n if (!section.diagnostics.length) continue;\n\n const start = section.grouped\n ? `\\n\\n<details>\\n<summary>${section.title}</summary>\\n`\n : \"\\n\\n**Errors**\\n\\n\";\n const end = section.grouped ? \"\\n</details>\" : \"\";\n let content = \"\";\n let file = \"\";\n\n for (const diagnostic of ordered(section.diagnostics)) {\n const group =\n section.grouped && file !== diagnostic.file ? `\\n**${inlineCode(diagnostic.file)}**\\n` : \"\";\n const uncertainLocation =\n section.baseline && (diagnostic as FixedDiagnostic).baselineLocationUncertain;\n const location = uncertainLocation\n ? \"File\"\n : section.grouped\n ? `L${diagnostic.location.line}`\n : inlineCode(`${diagnostic.file}:${diagnostic.location.line}`);\n const message = escapeMarkdown(diagnostic.message);\n const description = section.baseline\n ? statusText(\"fixed\", diagnostic.message)\n : !section.grouped\n ? `**${message}**`\n : message;\n const entry =\n `${group}${group ? \"\\n\" : \"\"}- ${section.icon} [${location}](${options.url(diagnostic, section.baseline)})` +\n ` ${description} ${inlineCode(diagnostic.rule)}` +\n `${options.includeDiagnosticDetails ? diagnosticDetails(diagnostic) : \"\"}\\n`;\n\n if (\n body.length + start.length + content.length + entry.length + end.length + reserve >\n limit\n ) {\n omitted = true;\n continue;\n }\n\n content += entry;\n file = diagnostic.file;\n }\n\n if (content) body += start + content + end;\n }\n\n return body + (omitted ? overflow : fullLink) + footer;\n}\n\nexport function diagnosticDifference(\n left: Diagnostic[],\n right: Diagnostic[],\n anchors?: { left: (diagnostic: Diagnostic) => string; right: (diagnostic: Diagnostic) => string },\n): FixedDiagnostic[] {\n const fingerprint = (d: Diagnostic) => `${d.file}\\0${d.rule}\\0${d.severity}\\0${d.message}`;\n const groups = new Map<string, Diagnostic[]>();\n\n for (const diagnostic of ordered(left)) {\n groups.set(fingerprint(diagnostic), [\n ...(groups.get(fingerprint(diagnostic)) ?? []),\n diagnostic,\n ]);\n }\n\n const result: FixedDiagnostic[] = [];\n\n for (const [key, baseline] of groups) {\n const current = right.filter((diagnostic) => fingerprint(diagnostic) === key);\n const matched = new Set<Diagnostic>();\n const used = new Set<Diagnostic>();\n\n if (anchors) {\n for (const diagnostic of baseline) {\n const anchor = anchors.left(diagnostic);\n\n if (!anchor || baseline.filter((entry) => anchors.left(entry) === anchor).length !== 1) {\n continue;\n }\n\n const candidates = current.filter(\n (entry) => !used.has(entry) && anchors.right(entry) === anchor,\n );\n\n if (candidates.length !== 1) continue;\n\n matched.add(diagnostic);\n used.add(candidates[0]);\n }\n }\n\n const remaining = baseline.filter((entry) => !matched.has(entry));\n const count = current.length - used.size;\n const uncertain = count > 0 && count < remaining.length;\n\n for (const diagnostic of remaining.slice(count)) {\n result.push(uncertain ? { ...diagnostic, baselineLocationUncertain: true } : diagnostic);\n }\n }\n\n return ordered(result);\n}\n",
48
+ "import { createHash } from \"node:crypto\";\nimport {\n SUMMARY_MARKER,\n REVIEW_MARKER,\n MAX_COMMENT_LENGTH,\n escapeMarkdown,\n inlineCode,\n issueCount,\n renderReviewProgress,\n} from \"./report\";\nimport type { Diagnostic } from \"../types\";\n\nconst STATE_PREFIX = \"<!-- react-luau-doctor:state:\";\nconst MAX_REVIEW_COMMENTS = 20;\n\nexport interface ReviewFinding {\n file: string;\n rule: string;\n severity: string;\n message: string;\n line: number;\n column?: number;\n diagnosticId?: string;\n anchor?: string;\n identity?: string;\n status: \"active\" | \"fixed\" | \"unknown\";\n}\n\nexport interface ReviewState {\n version: 1;\n commit: string;\n signature: string;\n runId?: string;\n attempt?: string;\n findings: ReviewFinding[];\n}\n\ninterface FindingRecord {\n state: ReviewState;\n finding: ReviewFinding;\n file: string | null;\n identity: string;\n}\n\nfunction assignFindings(records: FindingRecord[], analysis: ReviewAnalysis): void {\n const groups = new Map<string, FindingRecord[]>();\n\n for (const record of records) {\n if (!record.file) {\n record.finding.status = \"unknown\";\n continue;\n }\n\n const key = findingFingerprint({ ...record.finding, file: record.file });\n groups.set(key, [...(groups.get(key) ?? []), record]);\n }\n\n for (const [key, group] of groups) {\n const identities = [...new Set(group.map((entry) => entry.identity))];\n const originals = identities.map(\n (identity) => group.find((entry) => entry.identity === identity)!,\n );\n const current = analysis.current\n .filter((finding) => findingFingerprint(finding) === key)\n .map((finding) => ({ finding, used: false }));\n const matches = new Map<string, ReviewFinding>();\n\n // Unique source anchors disambiguate otherwise identical diagnostics when lines move\n for (const original of originals) {\n if (\n !original.finding.anchor ||\n originals.filter((entry) => entry.finding.anchor === original.finding.anchor).length !== 1\n ) {\n continue;\n }\n\n const candidates = current.filter(\n (entry) => !entry.used && entry.finding.anchor === original.finding.anchor,\n );\n\n if (candidates.length !== 1) continue;\n\n candidates[0].used = true;\n matches.set(original.identity, candidates[0].finding);\n }\n\n const unmatched = originals.filter((entry) => !matches.has(entry.identity));\n const remaining = current.filter((entry) => !entry.used);\n const ambiguous = remaining.length > 0 && remaining.length < unmatched.length;\n\n if (!ambiguous) {\n for (const original of unmatched) {\n const candidate = remaining\n .filter((entry) => !entry.used)\n .sort(\n (a, b) =>\n Math.abs(a.finding.line - original.finding.line) -\n Math.abs(b.finding.line - original.finding.line),\n )[0];\n\n if (!candidate) continue;\n\n candidate.used = true;\n matches.set(original.identity, candidate.finding);\n }\n }\n\n for (const record of group) {\n const match = matches.get(record.identity);\n const potentiallyRelocated =\n analysis.deletedFiles?.has(record.file!) &&\n analysis.current.some(\n (finding) =>\n finding.file !== record.file &&\n finding.rule === record.finding.rule &&\n finding.severity === record.finding.severity &&\n finding.message === record.finding.message,\n );\n\n if (match) {\n record.finding.status = \"active\";\n match.identity = record.identity;\n } else {\n record.finding.status =\n !ambiguous &&\n !potentiallyRelocated &&\n analysis.verifiedFiles.has(record.file!) &&\n analysis.eligible({ ...record.finding, file: record.file! }) &&\n record.state.signature === analysis.signature\n ? \"fixed\"\n : \"unknown\";\n }\n }\n }\n}\n\nexport function findingFingerprint(\n finding: Pick<ReviewFinding, \"file\" | \"rule\" | \"severity\" | \"message\">,\n): string {\n return createHash(\"sha256\")\n .update(`${finding.file}\\0${finding.rule}\\0${finding.severity}\\0${finding.message}`)\n .digest(\"hex\")\n .slice(0, 32);\n}\n\nexport function readReviewState(body: string): ReviewState | null {\n const encoded = body.match(/<!-- react-luau-doctor:state:([A-Za-z0-9+/=]+) -->/)?.[1];\n\n if (!encoded) return null;\n\n try {\n const state = JSON.parse(Buffer.from(encoded, \"base64\").toString(\"utf8\")) as ReviewState;\n\n if (\n state.version !== 1 ||\n typeof state.commit !== \"string\" ||\n typeof state.signature !== \"string\" ||\n !Array.isArray(state.findings) ||\n state.findings.length === 0 ||\n state.findings.length > MAX_REVIEW_COMMENTS\n ) {\n return null;\n }\n\n if (\n state.findings.some(\n (f) =>\n !f ||\n typeof f.file !== \"string\" ||\n typeof f.rule !== \"string\" ||\n typeof f.severity !== \"string\" ||\n typeof f.message !== \"string\" ||\n !Number.isSafeInteger(f.line) ||\n f.line < 1 ||\n ![\"active\", \"fixed\", \"unknown\"].includes(f.status) ||\n [f.anchor, f.identity, f.diagnosticId].some(\n (value) => value !== undefined && typeof value !== \"string\",\n ),\n )\n ) {\n return null;\n }\n\n return state;\n } catch {\n return null;\n }\n}\n\nexport function renderReviewBody(state: ReviewState, discussions?: number): string {\n const fixed = state.findings.filter((finding) => finding.status === \"fixed\").length;\n const unknown = state.findings.filter((finding) => finding.status === \"unknown\").length;\n const progress = renderReviewProgress(state.findings.length, fixed, unknown, discussions);\n const metadata = Buffer.from(JSON.stringify(state)).toString(\"base64\");\n\n return `${REVIEW_MARKER}\\n${progress}\\n\\n${STATE_PREFIX}${metadata} -->`;\n}\n\ninterface User {\n type?: string;\n login?: string;\n}\n\ninterface Comment {\n id: number;\n body?: string;\n user?: User | null;\n}\n\nexport interface ReviewComment extends Comment {\n pull_request_review_id: number;\n path: string;\n line?: number | null;\n original_line?: number;\n commit_id?: string;\n original_commit_id?: string;\n in_reply_to_id?: number;\n}\n\nexport interface Review extends Comment {\n commit_id?: string;\n}\n\ninterface Thread {\n isResolved: boolean;\n comments: { nodes: Array<{ databaseId: number | null }> };\n}\n\nexport interface Publication {\n head: string;\n base: string;\n runId: string;\n attempt: string;\n}\n\nexport class StalePublication extends Error {}\n\nexport class GitHubClient {\n constructor(\n readonly repo: string,\n readonly pullNumber: number,\n readonly publication: Publication,\n ) {}\n\n async request<T>(\n endpoint: string,\n options: { method?: string; body?: unknown; guarded?: boolean } = {},\n graphql = false,\n ): Promise<T> {\n const token = process.env.GITHUB_TOKEN;\n\n if (!token) throw new Error(\"GITHUB_TOKEN is unavailable\");\n\n const base = (process.env.GITHUB_API_URL ?? \"https://api.github.com\").replace(/\\/$/, \"\");\n const url = graphql\n ? `${base.replace(/\\/api\\/v3$/, \"/api\")}/graphql`\n : `${base}/repos/${this.repo}${endpoint}`;\n\n for (let attempt = 0; ; attempt += 1) {\n if (attempt > 0 && options.guarded) await this.assertCurrent();\n\n const response = await fetch(url, {\n method: options.method ?? \"GET\",\n headers: {\n Accept: \"application/vnd.github+json\",\n Authorization: `Bearer ${token}`,\n \"X-GitHub-Api-Version\": \"2022-11-28\",\n \"User-Agent\": \"react-luau-doctor\",\n \"Content-Type\": \"application/json\",\n },\n body: options.body === undefined ? undefined : JSON.stringify(options.body),\n signal: AbortSignal.timeout(30_000),\n });\n const responseText = response.status === 204 ? \"\" : await response.text();\n const result = response.ok && responseText ? JSON.parse(responseText) : undefined;\n const rateLimited =\n response.status === 429 ||\n (response.status === 403 &&\n (response.headers.get(\"x-ratelimit-remaining\") === \"0\" ||\n /rate limit|rate_limit|abuse detection/i.test(responseText))) ||\n (response.ok && graphql && result?.errors && /rate limit|rate_limit/i.test(responseText));\n\n if (response.ok && !rateLimited) {\n if (graphql && (result?.errors || !result?.data)) {\n throw new Error(`GitHub GraphQL: ${responseText}`);\n }\n\n return result as T;\n }\n\n const retryAfter = response.headers.get(\"retry-after\");\n const reset = Number(response.headers.get(\"x-ratelimit-reset\"));\n const delay = retryAfter\n ? /^\\d+$/.test(retryAfter)\n ? Number(retryAfter) * 1000\n : Date.parse(retryAfter) - Date.now()\n : response.headers.get(\"x-ratelimit-remaining\") === \"0\" && reset\n ? Math.max(0, reset * 1000 - Date.now() + 1000)\n : 60_000;\n\n // Only retry explicit rate-limit rejections, never ambiguous publication failures\n if (!rateLimited || attempt >= 2 || !Number.isFinite(delay) || delay > 60_000) {\n throw new Error(`GitHub API ${response.status}: ${responseText}`);\n }\n\n process.stderr.write(\n `react-luau-doctor: GitHub API ${response.status}; retrying in ${Math.ceil(Math.max(0, delay) / 1000)} seconds\\n`,\n );\n await new Promise((resolve) => setTimeout(resolve, Math.max(0, delay)));\n }\n }\n\n async list<T>(endpoint: string): Promise<T[]> {\n const all: T[] = [];\n\n for (let page = 1; ; page++) {\n const batch = await this.request<T[]>(`${endpoint}?per_page=100&page=${page}`);\n\n if (!Array.isArray(batch)) throw new Error(\"GitHub returned an invalid paginated response\");\n\n all.push(...batch);\n\n if (batch.length < 100) return all;\n }\n }\n\n async assertCurrent(): Promise<void> {\n const pull = await this.request<{\n head: { sha: string };\n base: { sha: string };\n state: string;\n }>(`/pulls/${this.pullNumber}`);\n\n if (\n pull.head?.sha !== this.publication.head ||\n pull.base?.sha !== this.publication.base ||\n pull.state !== \"open\"\n ) {\n throw new StalePublication(\"PR head or baseline changed; skipping outdated publication\");\n }\n\n const summaries = await this.list<Comment>(`/issues/${this.pullNumber}/comments`);\n\n for (const summary of summaries.filter(\n (c) => c.user?.type === \"Bot\" && c.body?.startsWith(SUMMARY_MARKER),\n )) {\n const marker = summary.body?.match(/<!-- react-luau-doctor:run:(\\d+):(\\d+) -->/);\n\n if (\n marker &&\n this.publication.runId &&\n (BigInt(marker[1]) > BigInt(this.publication.runId) ||\n (marker[1] === this.publication.runId &&\n Number(marker[2]) > Number(this.publication.attempt)))\n ) {\n throw new StalePublication(\n \"A newer workflow run already published; skipping outdated publication\",\n );\n }\n }\n\n if (!summaries.some((c) => c.user?.type === \"Bot\" && c.body?.startsWith(SUMMARY_MARKER))) {\n const reviews = await this.list<Review>(`/pulls/${this.pullNumber}/reviews`);\n\n for (const review of reviews.filter((r) => r.user?.type === \"Bot\")) {\n const state = readReviewState(review.body ?? \"\");\n\n if (\n state?.runId &&\n /^\\d+$/.test(state.runId) &&\n this.publication.runId &&\n (BigInt(state.runId) > BigInt(this.publication.runId) ||\n (state.runId === this.publication.runId &&\n Number(state.attempt) > Number(this.publication.attempt)))\n ) {\n throw new StalePublication(\n \"A newer review run already published; skipping outdated publication\",\n );\n }\n }\n }\n }\n\n async mutate<T>(endpoint: string, method: string, body?: unknown): Promise<T> {\n await this.assertCurrent();\n\n return this.request<T>(endpoint, { method, body, guarded: true });\n }\n\n async sticky(body: string, complete = true): Promise<void> {\n await this.assertCurrent();\n const comments = await this.list<Comment>(`/issues/${this.pullNumber}/comments`);\n const previous = comments.find(\n (c) => c.user?.type === \"Bot\" && c.body?.startsWith(SUMMARY_MARKER),\n );\n const identity = `<!-- react-luau-doctor:commit:${this.publication.head}:${this.publication.base}:complete -->`;\n\n if (!complete && previous?.body?.includes(identity)) return;\n\n const stamp =\n (this.publication.runId\n ? `\\n<!-- react-luau-doctor:run:${this.publication.runId}:${this.publication.attempt} -->`\n : \"\") +\n `\\n<!-- react-luau-doctor:commit:${this.publication.head}:${this.publication.base}:${complete ? \"complete\" : \"incomplete\"} -->`;\n const next = body + stamp;\n\n if (previous?.body === next) return;\n\n await this.mutate(\n previous ? `/issues/comments/${previous.id}` : `/issues/${this.pullNumber}/comments`,\n previous ? \"PATCH\" : \"POST\",\n { body: next },\n );\n }\n\n async threads(): Promise<Map<number, { resolved: boolean }>> {\n const [owner, name] = this.repo.split(\"/\");\n const result = new Map<number, { resolved: boolean }>();\n let cursor: string | null = null;\n\n for (;;) {\n const response: {\n data: {\n repository: {\n pullRequest: {\n reviewThreads: {\n nodes: Thread[];\n pageInfo: { hasNextPage: boolean; endCursor: string | null };\n };\n };\n };\n };\n } = await this.request(\n \"\",\n {\n method: \"POST\",\n body: {\n query: `query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n isResolved\n comments(first: 1) {\n nodes { databaseId }\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }`,\n variables: { owner, name, number: this.pullNumber, cursor },\n },\n },\n true,\n );\n const connection = response.data.repository?.pullRequest?.reviewThreads;\n\n if (!connection || !Array.isArray(connection.nodes)) {\n throw new Error(\"GitHub review-thread state is unavailable\");\n }\n\n for (const thread of connection.nodes) {\n const root = thread.comments.nodes[0]?.databaseId;\n\n // REST has all replies; the GraphQL connection supplies the actual resolution state\n if (typeof thread.isResolved !== \"boolean\") {\n throw new Error(\"GitHub returned an invalid review-thread resolution state\");\n }\n\n if (root) result.set(root, { resolved: thread.isResolved });\n }\n\n if (!connection.pageInfo.hasNextPage) return result;\n\n if (!connection.pageInfo.endCursor || connection.pageInfo.endCursor === cursor) {\n throw new Error(\"GitHub review-thread pagination did not advance\");\n }\n\n cursor = connection.pageInfo.endCursor;\n }\n }\n}\n\nexport function commentFingerprint(comment: ReviewComment): string | null {\n if (\n comment.user?.type !== \"Bot\" ||\n !comment.body?.startsWith(REVIEW_MARKER) ||\n comment.in_reply_to_id\n ) {\n return null;\n }\n\n const marker = comment.body.match(/<!-- react-luau-doctor:fingerprint:([a-f0-9]{32}) -->/i);\n\n if (marker) return marker[1].toLowerCase();\n\n const legacy = comment.body.match(\n /\\*\\*React-Luau Doctor\\*\\* · `([^`]+)` \\((error|warning|suggestion)\\)\\n\\n([^\\n]+)/,\n );\n\n return legacy\n ? findingFingerprint({\n file: comment.path,\n rule: legacy[1],\n severity: legacy[2],\n message: legacy[3],\n })\n : null;\n}\n\nexport interface ReviewAnalysis {\n signature: string;\n complete: boolean;\n current: ReviewFinding[];\n introduced: Array<{ finding: ReviewFinding; diagnostic: Diagnostic }>;\n verifiedFiles: Set<string>;\n deletedFiles?: ReadonlySet<string>;\n eligible: (finding: ReviewFinding) => boolean;\n canonicalFile: (file: string, commit: string) => string | null;\n}\n\nexport interface ReviewSnapshot {\n reviews: Review[];\n comments: ReviewComment[];\n}\n\nfunction recoverReviewState(review: Review, comments: ReviewComment[]): ReviewState | null {\n const count = Number(\n review.body?.match(\n /(?:^|\\n)(?:\\*\\*)?React-Luau Doctor found (\\d+) new issues?(?:\\*\\*)?(?:\\n|$)/,\n )?.[1],\n );\n const roots = comments.filter(\n (comment) => comment.pull_request_review_id === review.id && !comment.in_reply_to_id,\n );\n\n if (!count || count > MAX_REVIEW_COMMENTS || roots.length !== count) return null;\n\n const commit = review.commit_id ?? roots[0]?.original_commit_id ?? roots[0]?.commit_id;\n\n if (!commit) return null;\n\n const findings: ReviewFinding[] = [];\n\n for (const comment of roots) {\n const diagnostic = comment.body?.match(\n /\\*\\*React-Luau Doctor\\*\\* · `([^`]+)` \\((error|warning|suggestion)\\)\\n\\n([^\\n]+)/,\n );\n const line = comment.original_line ?? comment.line;\n\n if (!diagnostic || !Number.isSafeInteger(line) || line! < 1) return null;\n\n const finding: ReviewFinding = {\n file: comment.path,\n rule: diagnostic[1],\n severity: diagnostic[2],\n message: diagnostic[3],\n line: line!,\n identity: `legacy:${review.id}:${comment.id}`,\n status: \"unknown\",\n };\n\n if (commentFingerprint(comment) !== findingFingerprint(finding)) return null;\n\n findings.push(finding);\n }\n\n // Deleted comments cannot be reconstructed, and surviving comments do not prove the original configuration\n return { version: 1, commit, signature: \"\", findings };\n}\n\nfunction prioritizedFindings(\n candidates: ReviewAnalysis[\"introduced\"],\n): ReviewAnalysis[\"introduced\"] {\n const severity = { error: 0, warning: 1, suggestion: 2 };\n const counts = new Map<string, number>();\n\n return [...candidates]\n .sort(\n (a, b) =>\n a.finding.file.localeCompare(b.finding.file) ||\n a.finding.line - b.finding.line ||\n a.diagnostic.id.localeCompare(b.diagnostic.id),\n )\n .map((candidate) => {\n const key = `${candidate.finding.severity}\\0${candidate.finding.file}`;\n const round = counts.get(key) ?? 0;\n counts.set(key, round + 1);\n\n return { candidate, round };\n })\n .sort(\n (a, b) =>\n severity[a.candidate.diagnostic.severity] - severity[b.candidate.diagnostic.severity] ||\n a.round - b.round ||\n a.candidate.finding.file.localeCompare(b.candidate.finding.file),\n )\n .map(({ candidate }) => candidate);\n}\n\nexport async function reviewSnapshot(client: GitHubClient): Promise<ReviewSnapshot> {\n const [reviews, comments] = await Promise.all([\n client.list<Review>(`/pulls/${client.pullNumber}/reviews`),\n client.list<ReviewComment>(`/pulls/${client.pullNumber}/comments`),\n ]);\n\n return { reviews, comments };\n}\n\nexport async function reconcileReviews(\n client: GitHubClient,\n snapshot: ReviewSnapshot,\n analysis: ReviewAnalysis,\n canInline: (diagnostic: Diagnostic) => boolean,\n): Promise<number> {\n if (!analysis.complete) return snapshot.comments.filter((c) => commentFingerprint(c)).length;\n\n const ownedReviews = snapshot.reviews.filter(\n (r) =>\n r.user?.type === \"Bot\" &&\n (r.body?.startsWith(REVIEW_MARKER) ||\n /^(?:\\*\\*)?React-Luau Doctor found (?:\\d+ )?new issues?(?:\\*\\*)?$/.test(r.body ?? \"\") ||\n r.body?.startsWith(\n \"✅ React-Luau Doctor: findings from this review are no longer current\",\n )),\n );\n let threads: Map<number, { resolved: boolean }> | undefined;\n\n try {\n threads = await client.threads();\n } catch (error) {\n process.stderr.write(\n `react-luau-doctor: could not read review threads; preserving discussions: ${error instanceof Error ? error.message : String(error)}\\n`,\n );\n }\n\n const states = new Map<number, ReviewState>();\n const records: FindingRecord[] = [];\n\n for (const review of ownedReviews) {\n const original =\n readReviewState(review.body ?? \"\") ?? recoverReviewState(review, snapshot.comments);\n\n if (!original) continue;\n\n const state = { ...original, findings: original.findings.map((finding) => ({ ...finding })) };\n states.set(review.id, state);\n\n for (const finding of state.findings) {\n const identity =\n finding.identity ?? `${state.commit}:${findingFingerprint(finding)}:${finding.line}`;\n finding.identity = identity;\n records.push({\n state,\n finding,\n identity,\n file: analysis.canonicalFile(finding.file, state.commit),\n });\n }\n }\n\n assignFindings(records, analysis);\n\n for (const state of states.values()) {\n if (state.signature !== \"\") continue;\n\n // Once every recovered finding is observed under this configuration, later compatible scans can verify fixes\n if (\n state.findings.every((finding) => {\n const file = analysis.canonicalFile(finding.file, state.commit);\n\n return (\n finding.status === \"active\" &&\n file &&\n analysis.verifiedFiles.has(file) &&\n analysis.eligible({ ...finding, file })\n );\n })\n ) {\n state.signature = analysis.signature;\n }\n }\n\n const represented = new Map<string, number>();\n const representedIdentities = new Set<string>();\n const failures: string[] = [];\n const updates: Array<{ review: Review; body: string; cleanup: ReviewComment[] }> = [];\n let inlineCount = snapshot.comments.filter((c) => commentFingerprint(c)).length;\n\n for (const review of ownedReviews.sort((a, b) => a.id - b.id)) {\n const state = states.get(review.id);\n\n if (!state) {\n const retained = snapshot.comments.filter(\n (comment) => comment.pull_request_review_id === review.id && commentFingerprint(comment),\n ).length;\n const body =\n `${REVIEW_MARKER}\\n**React-Luau Doctor · earlier findings**\\n\\n` +\n `${retained ? `${issueCount(retained)} retained inline · ` : \"\"}` +\n \"Original finding history unavailable · See the current PR report\";\n updates.push({ review, body, cleanup: [] });\n continue;\n }\n\n let discussions: number | undefined = threads ? 0 : undefined;\n const ownedComments = snapshot.comments.filter(\n (c) => c.pull_request_review_id === review.id && commentFingerprint(c),\n );\n const consumedComments = new Set<number>();\n const cleanup: ReviewComment[] = [];\n\n for (const finding of state.findings) {\n const file = analysis.canonicalFile(finding.file, state.commit);\n const fingerprint = findingFingerprint(finding);\n const comments = ownedComments\n .filter((c) => !consumedComments.has(c.id) && commentFingerprint(c) === fingerprint)\n .sort(\n (a, b) =>\n Math.abs((a.original_line ?? a.line ?? finding.line) - finding.line) -\n Math.abs((b.original_line ?? b.line ?? finding.line) - finding.line),\n );\n const comment = comments[0];\n\n if (comment) consumedComments.add(comment.id);\n\n const replies = comment\n ? snapshot.comments.filter((c) => c.in_reply_to_id === comment.id)\n : [];\n const discussion = comment && replies.length > 0;\n\n if (discussion && threads) {\n const thread = threads.get(comment.id);\n\n if (!thread || typeof thread.resolved !== \"boolean\") discussions = undefined;\n else if (!thread.resolved && discussions !== undefined) discussions++;\n }\n\n const key = findingFingerprint({ ...finding, file: file ?? finding.file });\n\n if (\n ((finding.status === \"active\" && comment) || finding.status === \"unknown\") &&\n !representedIdentities.has(finding.identity!)\n ) {\n represented.set(key, (represented.get(key) ?? 0) + 1);\n representedIdentities.add(finding.identity!);\n }\n\n if (comment && finding.status === \"fixed\" && !discussion && threads?.has(comment.id)) {\n cleanup.push(comment);\n }\n }\n\n const body = renderReviewBody(state, discussions);\n\n if (body !== review.body) {\n state.runId = client.publication.runId;\n state.attempt = client.publication.attempt;\n }\n\n updates.push({\n review,\n body: body === review.body ? body : renderReviewBody(state, discussions),\n cleanup,\n });\n }\n\n for (const comment of snapshot.comments) {\n if (!commentFingerprint(comment) || states.has(comment.pull_request_review_id)) continue;\n\n const key = commentFingerprint(comment)!;\n represented.set(key, (represented.get(key) ?? 0) + 1);\n }\n\n const selected: Array<{ finding: ReviewFinding; diagnostic: Diagnostic }> = [];\n const candidates: ReviewAnalysis[\"introduced\"] = [];\n const alreadyPublished = [...states.values()]\n .filter((state) => state.commit === client.publication.head)\n .reduce((count, state) => count + state.findings.length, 0);\n\n for (const candidate of analysis.introduced) {\n const key = findingFingerprint(candidate.finding);\n const count = represented.get(key) ?? 0;\n\n if (count) {\n represented.set(key, count - 1);\n continue;\n }\n\n if (!canInline(candidate.diagnostic)) continue;\n\n candidates.push(candidate);\n }\n\n for (const candidate of prioritizedFindings(candidates)) {\n const key = findingFingerprint(candidate.finding);\n\n if (selected.length + alreadyPublished >= MAX_REVIEW_COMMENTS) break;\n\n const current = analysis.current.find(\n (finding) =>\n findingFingerprint(finding) === key &&\n (candidate.finding.diagnosticId\n ? finding.diagnosticId === candidate.finding.diagnosticId\n : finding.line === candidate.finding.line && finding.column === candidate.finding.column),\n );\n candidate.finding.identity =\n current?.identity ?? `${client.publication.head}:${key}:${candidate.diagnostic.id}`;\n const nextState: ReviewState = {\n version: 1,\n signature: analysis.signature,\n commit: client.publication.head,\n findings: [...selected, candidate].map((entry) => entry.finding),\n };\n\n if (\n renderReviewBody(nextState, 0).length > MAX_COMMENT_LENGTH ||\n inlineBody(candidate.finding, candidate.diagnostic).length > MAX_COMMENT_LENGTH\n ) {\n continue;\n }\n\n selected.push(candidate);\n }\n\n let publicationSucceeded = true;\n\n if (selected.length) {\n const state: ReviewState = {\n version: 1,\n commit: client.publication.head,\n signature: analysis.signature,\n runId: client.publication.runId,\n attempt: client.publication.attempt,\n findings: selected.map((entry) => entry.finding),\n };\n const comments = selected.map(({ finding, diagnostic }) => ({\n path: finding.file,\n line: finding.line,\n side: \"RIGHT\",\n body: inlineBody(finding, diagnostic),\n }));\n\n try {\n await client.mutate(`/pulls/${client.pullNumber}/reviews`, \"POST\", {\n commit_id: client.publication.head,\n event: \"COMMENT\",\n body: renderReviewBody(state, 0),\n comments,\n });\n inlineCount += comments.length;\n } catch (error) {\n if (error instanceof StalePublication) throw error;\n\n publicationSucceeded = false;\n failures.push(`could not create new review comments: ${String(error)}`);\n }\n }\n\n for (const { review, body, cleanup } of updates) {\n try {\n // Persist original membership before deleting its only remaining evidence\n if (body !== review.body) {\n await client.mutate(`/pulls/${client.pullNumber}/reviews/${review.id}`, \"PUT\", { body });\n }\n\n if (!publicationSucceeded) continue;\n\n for (const comment of cleanup) {\n const latest = await client.list<ReviewComment>(`/pulls/${client.pullNumber}/comments`);\n\n if (latest.some((entry) => entry.in_reply_to_id === comment.id)) continue;\n\n if (!latest.some((entry) => entry.id === comment.id)) continue;\n\n await client.mutate(`/pulls/comments/${comment.id}`, \"DELETE\");\n inlineCount--;\n }\n } catch (error) {\n if (error instanceof StalePublication) throw error;\n\n failures.push(`could not update review ${review.id}: ${String(error)}`);\n }\n }\n\n if (failures.length) {\n process.stderr.write(\n `react-luau-doctor: could not update inline review comments: ${failures.join(\"; \")}\\n`,\n );\n }\n\n return inlineCount;\n}\n\nfunction inlineBody(finding: ReviewFinding, diagnostic: Diagnostic): string {\n const details = [diagnostic.help, diagnostic.explanation, diagnostic.caveat].filter(\n (value): value is string => Boolean(value) && value !== finding.message,\n );\n\n const header = `${REVIEW_MARKER}\\n<!-- react-luau-doctor:fingerprint:${findingFingerprint(finding)} -->`;\n const title = `**React-Luau Doctor** · ${inlineCode(finding.rule)} (${finding.severity})`;\n const guidance = [...new Set(details)].map((detail) => `\\n\\n${escapeMarkdown(detail)}`).join(\"\");\n\n return `${header}\\n${title}\\n\\n${escapeMarkdown(finding.message)}${guidance}`;\n}\n",
49
+ "import path from \"node:path\";\r\nimport { loadConfig } from \"./config\";\r\nimport { isSelectedLuauPath } from \"./files\";\r\nimport { createGitScopePlan, type GitScopePlan } from \"./git\";\r\nimport { createScanAnalysisSession, rebuildReport, scanPath, scoreDiagnostics, type ScanAnalysisSession } from \"./scanner\";\r\nimport type {\r\n Category,\r\n Diagnostic,\r\n DoctorConfig,\r\n ScanOptions,\r\n ScanProgress,\r\n ScanReport,\r\n ScanScope,\r\n Severity,\r\n} from \"./types\";\r\n\r\nexport interface ScopedScanOptions {\r\n scope: ScanScope;\r\n targetRoot?: string;\r\n base?: string;\r\n includeUntracked?: boolean;\r\n staged?: boolean;\r\n changedFilesFrom?: string;\r\n minSeverity?: Severity;\r\n categories?: Category[];\r\n config?: DoctorConfig;\r\n respectInlineDisables?: boolean;\r\n deadlineAt?: number;\r\n onProgress?: (progress: ScanProgress) => void;\r\n cache?: boolean;\r\n parallel?: boolean;\r\n analysisSession?: ScanAnalysisSession;\r\n onDelta?: (\r\n current: Diagnostic[],\r\n baseline: Diagnostic[],\r\n context: { current: ScanReport; baseline: ScanReport; plan: GitScopePlan },\r\n ) => void;\r\n}\r\n\r\nfunction diagnosticFingerprint(diagnostic: Diagnostic): string {\r\n return `${diagnostic.file}\\0${diagnostic.rule}\\0${diagnostic.severity}\\0${diagnostic.message}`;\r\n}\r\n\r\nfunction introducedDiagnostics(current: Diagnostic[], baseline: Diagnostic[]): Diagnostic[] {\r\n const baselineCounts = new Map<string, number>();\r\n for (const diagnostic of baseline) {\r\n const fingerprint = diagnosticFingerprint(diagnostic);\r\n baselineCounts.set(fingerprint, (baselineCounts.get(fingerprint) ?? 0) + 1);\r\n }\r\n\r\n const introduced: Diagnostic[] = [];\r\n for (const diagnostic of current) {\r\n const fingerprint = diagnosticFingerprint(diagnostic);\r\n const remaining = baselineCounts.get(fingerprint) ?? 0;\r\n if (remaining > 0) baselineCounts.set(fingerprint, remaining - 1);\r\n else introduced.push(diagnostic);\r\n }\r\n return introduced;\r\n}\r\n\r\nfunction touchesChangedLines(diagnostic: Diagnostic, ranges: Array<{ start: number; end: number }>): boolean {\r\n const locations = [diagnostic.location, ...(diagnostic.highlights ?? [])];\r\n return locations.some((location) =>\r\n ranges.some((range) => location.endLine >= range.start && location.line <= range.end)\r\n );\r\n}\r\n\r\nfunction filterGitScopePlan(plan: GitScopePlan, config: DoctorConfig): GitScopePlan {\r\n const selected = (relativePath: string | undefined): boolean =>\r\n relativePath !== undefined && isSelectedLuauPath(relativePath, config);\r\n\r\n return {\r\n ...plan,\r\n changedFiles: plan.changedFiles.filter((file) => isSelectedLuauPath(file, config)),\r\n currentFiles: plan.currentFiles.filter((file) => selected(file.relativePath)),\r\n baselineFiles: plan.baselineFiles.filter((file) => selected(file.relativePath)),\r\n changedLines: new Map(\r\n [...plan.changedLines].filter(([file]) => isSelectedLuauPath(file, config)),\r\n ),\r\n };\r\n}\r\n\r\nfunction sharedScanOptions(options: ScopedScanOptions, projectRoot: string, phase?: string): ScanOptions & { analysisSession?: ScanAnalysisSession } {\r\n return {\r\n projectRoot,\r\n minSeverity: options.minSeverity,\r\n categories: options.categories,\r\n config: options.config,\r\n respectInlineDisables: options.respectInlineDisables,\r\n deadlineAt: options.deadlineAt,\r\n onProgress: options.onProgress,\r\n progressPhase: phase,\r\n cache: options.cache,\r\n parallel: options.parallel,\r\n analysisSession: options.analysisSession,\r\n };\r\n}\r\n\r\nexport async function scanProjectWithScope(projectRoot: string, options: ScopedScanOptions): Promise<ScanReport> {\r\n const targetRoot = path.resolve(options.targetRoot ?? projectRoot);\r\n const config = options.config ?? loadConfig(projectRoot);\r\n const configuredOptions = options.config ? options : { ...options, config };\r\n\r\n if (options.scope === \"full\" && !options.staged && !options.changedFilesFrom) {\r\n const report = await scanPath(targetRoot, sharedScanOptions(configuredOptions, projectRoot));\r\n return { ...report, scope: \"full\" };\r\n }\r\n\r\n const effectiveScope: Exclude<ScanScope, \"full\"> = options.staged\r\n ? options.scope === \"lines\"\r\n ? \"lines\"\r\n : \"files\"\r\n : options.scope === \"full\"\r\n ? \"files\"\r\n : options.scope;\r\n const scanOptions: ScopedScanOptions = effectiveScope === \"changed\"\r\n ? { ...configuredOptions, analysisSession: options.analysisSession ?? createScanAnalysisSession() }\r\n : configuredOptions;\r\n\r\n const plan = filterGitScopePlan(createGitScopePlan(targetRoot, {\r\n scope: effectiveScope,\r\n base: options.base,\r\n includeUntracked: options.includeUntracked,\r\n staged: options.staged,\r\n changedFilesFrom: options.changedFilesFrom,\r\n }, projectRoot), config);\r\n\r\n const current = await scanPath(targetRoot, {\r\n ...sharedScanOptions(scanOptions, projectRoot, effectiveScope === \"changed\" ? \"current\" : undefined),\r\n files: plan.currentFiles,\r\n });\r\n\r\n let diagnostics = current.diagnostics;\r\n let partial = current.partial;\r\n let skippedFiles = current.skippedFiles;\r\n let unverifiedFiles = current.unverifiedFiles;\r\n\r\n if (effectiveScope === \"changed\") {\r\n const baseline = await scanPath(targetRoot, {\r\n ...sharedScanOptions(scanOptions, projectRoot, \"baseline\"),\r\n files: plan.baselineFiles,\r\n });\r\n options.onDelta?.(current.diagnostics, baseline.diagnostics, { current, baseline, plan });\r\n const baselineSkipped = new Set(baseline.skippedFiles ?? []);\r\n const baselinePaths = new Set(plan.baselineFiles.map((file) => file.relativePath ?? \"\"));\r\n const comparableCurrent = current.diagnostics.filter(\r\n (diagnostic) => !baselinePaths.has(diagnostic.file) || !baselineSkipped.has(diagnostic.file),\r\n );\r\n diagnostics = introducedDiagnostics(comparableCurrent, baseline.diagnostics);\r\n partial = partial || Boolean(baseline.partial);\r\n skippedFiles = [...new Set([...(current.skippedFiles ?? []), ...(baseline.skippedFiles ?? [])])].sort();\r\n unverifiedFiles = [\r\n ...new Set([...(current.unverifiedFiles ?? []), ...(baseline.unverifiedFiles ?? [])]),\r\n ].sort();\r\n } else if (effectiveScope === \"lines\") {\r\n diagnostics = current.diagnostics.filter((diagnostic) =>\r\n touchesChangedLines(diagnostic, plan.changedLines.get(diagnostic.file) ?? []),\r\n );\r\n }\r\n\r\n return rebuildReport(current, diagnostics, {\r\n partial,\r\n skippedFiles,\r\n unverifiedFiles,\r\n scope: options.staged ? \"staged\" : effectiveScope,\r\n base: plan.base,\r\n changedFiles: plan.changedFiles,\r\n });\r\n}\r\n\r\nfunction normalize(value: string): string {\r\n return value.split(path.sep).join(\"/\");\r\n}\r\n\r\nfunction prefixDiagnostic(diagnostic: Diagnostic, prefix: string): Diagnostic {\r\n if (!prefix || prefix === \".\") return diagnostic;\r\n return { ...diagnostic, file: normalize(path.posix.join(prefix, diagnostic.file)) };\r\n}\r\n\r\nexport function aggregateReports(root: string, reports: Array<{ projectRoot: string; report: ScanReport }>): ScanReport {\r\n const startedDuration = reports.reduce((total, entry) => total + entry.report.durationMs, 0);\r\n const diagnostics: Diagnostic[] = [];\r\n const skippedFiles: string[] = [];\r\n const unverifiedFiles: string[] = [];\r\n const changedFiles: string[] = [];\r\n const notes: string[] = [];\r\n const projects: string[] = [];\r\n let scannedFiles = 0;\r\n let candidateFiles = 0;\r\n let partial = false;\r\n\r\n for (const { projectRoot, report } of reports) {\r\n const prefix = normalize(path.relative(root, projectRoot));\r\n projects.push(prefix || \".\");\r\n scannedFiles += report.scannedFiles;\r\n candidateFiles += report.candidateFiles ?? 0;\r\n partial = partial || Boolean(report.partial);\r\n diagnostics.push(...report.diagnostics.map((diagnostic) => prefixDiagnostic(diagnostic, prefix)));\r\n skippedFiles.push(...(report.skippedFiles ?? []).map((file) => (prefix ? normalize(path.posix.join(prefix, file)) : file)));\r\n unverifiedFiles.push(\r\n ...(report.unverifiedFiles ?? []).map((file) =>\r\n prefix ? normalize(path.posix.join(prefix, file)) : file,\r\n ),\r\n );\r\n changedFiles.push(...(report.changedFiles ?? []).map((file) => (prefix ? normalize(path.posix.join(prefix, file)) : file)));\r\n notes.push(...(report.notes ?? []));\r\n }\r\n\r\n diagnostics.sort(\r\n (a, b) => a.file.localeCompare(b.file) || a.location.line - b.location.line || b.severity.localeCompare(a.severity),\r\n );\r\n const counts: Record<Severity, number> = { error: 0, warning: 0, suggestion: 0 };\r\n for (const diagnostic of diagnostics) counts[diagnostic.severity] += 1;\r\n\r\n const scopes = new Set(reports.map((entry) => entry.report.scope).filter(Boolean));\r\n const bases = new Set(reports.map((entry) => entry.report.base).filter(Boolean));\r\n\r\n return {\r\n schemaVersion: 1,\r\n root,\r\n scannedFiles,\r\n candidateFiles,\r\n durationMs: Math.round(startedDuration * 100) / 100,\r\n score: scoreDiagnostics(diagnostics, scannedFiles),\r\n counts,\r\n diagnostics,\r\n partial,\r\n skippedFiles: [...new Set(skippedFiles)].sort(),\r\n unverifiedFiles: unverifiedFiles.length ? [...new Set(unverifiedFiles)].sort() : undefined,\r\n scope: scopes.size === 1 ? [...scopes][0] : undefined,\r\n base: bases.size === 1 ? [...bases][0] : undefined,\r\n changedFiles: [...new Set(changedFiles)].sort(),\r\n projects,\r\n notes: notes.length > 0 ? [...new Set(notes)] : undefined,\r\n };\r\n}\r\n",
50
+ "import fs from \"node:fs\";\nimport path from \"node:path\";\n\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 transitiveAffectedFiles,\n} from \"./cache\";\n\nimport { loadConfig, validateKnownRules } from \"./config\";\nimport { discoverLuauFiles } from \"./files\";\n\nimport {\n analyzeReactFile,\n type ReactFileAnalysisInput,\n type ReactFileAnalysisResult,\n} from \"./file-analysis\";\n\nimport { AnalysisWorkerPool, analysisWorkerCount } from \"./parallel\";\n\nimport {\n buildProjectModel,\n type ProjectModelModuleCacheEntry,\n} from \"./project-model\";\n\nimport {\n buildProjectSourceEffects,\n type CachedSourceEffectModule,\n type ProjectEffectParseCacheEntry,\n} from \"./project-effects\";\n\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 & {\n analysisSession?: ScanAnalysisSession;\n};\n\nexport function scoreDiagnostics(\n diagnostics: Diagnostic[],\n scannedFiles: number,\n): number {\n const weightedFindings = diagnostics.reduce((total, diagnostic) => {\n if (diagnostic.severity === \"error\") return total + 8;\n\n if (diagnostic.severity === \"warning\") return total + 3;\n\n return total + 1;\n }, 0);\n\n const penalty = (weightedFindings / Math.max(scannedFiles, 1)) * 20;\n\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> = {\n error: 0,\n warning: 0,\n suggestion: 0,\n };\n\n for (const diagnostic of diagnostics) counts[diagnostic.severity] += 1;\n\n return counts;\n}\n\nexport function rebuildReport(\n report: ScanReport,\n diagnostics: Diagnostic[],\n metadata: Partial<\n Omit<ScanReport, \"schemaVersion\" | \"diagnostics\" | \"counts\" | \"score\">\n > = {},\n): ScanReport {\n const sorted = [...diagnostics].sort(\n (a, b) =>\n a.file.localeCompare(b.file) ||\n a.location.line - b.location.line ||\n b.severity.localeCompare(a.severity),\n );\n\n const next = { ...report, ...metadata };\n\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 candidateInputs(\n targetPath: string,\n projectRoot: string,\n config: DoctorConfig,\n options: ScanOptions,\n): ScanFileInput[] {\n if (options.files) return options.files;\n\n const targetStat = fs.statSync(targetPath);\n\n return discoverLuauFiles(targetPath, config, projectRoot).map(\n (absolutePath) => ({\n absolutePath,\n forceScan: targetStat.isFile(),\n }),\n );\n}\n\nfunction projectInputs(\n root: string,\n config: DoctorConfig,\n scopedCandidates: ScanFileInput[],\n): ScanFileInput[] {\n const all = discoverLuauFiles(root, config).map(\n (absolutePath) => ({ absolutePath }) satisfies ScanFileInput,\n );\n\n const overlays = new Map<string, ScanFileInput>();\n\n for (const candidate of scopedCandidates) {\n const relativePath = normalizeRelative(\n candidate.relativePath ?? path.relative(root, candidate.absolutePath),\n );\n\n overlays.set(relativePath, candidate);\n }\n\n const result: ScanFileInput[] = [];\n const used = new Set<string>();\n\n for (const candidate of all) {\n const relativePath = normalizeRelative(\n path.relative(root, candidate.absolutePath),\n );\n\n result.push(overlays.get(relativePath) ?? candidate);\n used.add(relativePath);\n }\n\n for (const [relativePath, candidate] of overlays) {\n if (!used.has(relativePath)) result.push(candidate);\n }\n\n return result;\n}\n\nexport async function scanPath(\n target = \".\",\n options: ScanRuntimeOptions = {},\n): Promise<ScanReport> {\n const startedAt = performance.now();\n const cwd = path.resolve(options.cwd ?? process.cwd());\n const targetPath = path.resolve(cwd, target);\n\n if (!fs.existsSync(targetPath))\n throw new Error(`Scan path does not exist: ${target}`);\n\n const targetStat = fs.statSync(targetPath);\n\n const defaultRoot = targetStat.isFile()\n ? path.dirname(targetPath)\n : targetPath;\n\n const root = path.resolve(options.projectRoot ?? defaultRoot);\n const config: DoctorConfig = options.config ?? loadConfig(root);\n\n validateKnownRules(config);\n\n const candidates = candidateInputs(targetPath, root, config, options);\n const targetIsProjectRoot = path.resolve(targetPath) === path.resolve(root);\n\n const modelCandidates =\n options.files || !targetIsProjectRoot\n ? projectInputs(root, config, candidates)\n : candidates;\n\n const hasSourceOverlays = modelCandidates.some(\n (candidate) => candidate.source !== undefined,\n );\n\n const canPersistCache = !hasSourceOverlays;\n\n const phaseSuffix = options.progressPhase\n ? ` (${options.progressPhase})`\n : \"\";\n\n const phaseId = (phase: string): string =>\n [options.progressPhase, phase].filter(Boolean).join(\":\");\n\n const progress = (\n phase: string,\n label: string,\n current: number,\n total: number,\n file?: string,\n partial?: boolean,\n ): void => {\n options.onProgress?.({\n current,\n total,\n file,\n partial,\n phase: phaseId(phase),\n label: `${label}${phaseSuffix}`,\n });\n };\n\n const cacheSession = prepareProjectCache(\n root,\n modelCandidates,\n options.cache ?? true,\n (current, total, file) =>\n progress(\"index\", \"Indexing project\", current, total, file),\n );\n\n const deadlineAt =\n options.deadlineAt ??\n (options.maxDurationMs !== undefined\n ? startedAt + options.maxDurationMs\n : undefined);\n\n const respectInlineDisables =\n options.respectInlineDisables ?? config.respectInlineDisables ?? true;\n\n const minSeverity = options.minSeverity ?? \"suggestion\";\n\n const reportCacheKey = stableCacheKey({\n minSeverity,\n categories: options.categories ? [...options.categories].sort() : [],\n respectInlineDisables,\n rules: config.rules ?? {},\n });\n\n const canCacheWholeReport =\n canPersistCache &&\n targetIsProjectRoot &&\n options.files === undefined &&\n deadlineAt === undefined;\n\n const previousReport = canCacheWholeReport\n ? previousCachedReport(cacheSession, reportCacheKey)\n : null;\n\n const previousProject = previousProjectModel(cacheSession);\n\n const previousEffectModules =\n options.analysisSession?.effectModules ?? cachedEffectModules(cacheSession);\n\n const changedFiles = changedProjectFiles(cacheSession);\n\n if (canCacheWholeReport) {\n const reportHit = cachedReport(cacheSession, reportCacheKey);\n\n if (reportHit) {\n progress(\"report-cache\", \"Loading cached results\", 1, 1);\n\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 unverifiedFiles: reportHit.unverifiedFiles,\n };\n }\n }\n\n const projectParseCache = new Map<string, ProjectEffectParseCacheEntry>();\n\n const fileHashes = Object.fromEntries(\n Object.entries(cacheSession.files).map(([file, state]) => [\n file,\n state.hash,\n ]),\n );\n\n const materializedCandidates = materializeProjectCandidates(\n cacheSession,\n modelCandidates,\n );\n\n const parallelEnabled =\n options.parallel !== false && deadlineAt === undefined;\n\n const workerCount = parallelEnabled\n ? analysisWorkerCount(\n Math.max(materializedCandidates.length, candidates.length),\n )\n : 1;\n\n const workerPool =\n workerCount > 1 ? new AnalysisWorkerPool(workerCount) : null;\n\n try {\n let project = cachedProjectModel(cacheSession);\n\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\n const rebuilt = buildProjectModel(root, materializedCandidates, {\n fileHashes,\n moduleCache: options.analysisSession?.projectModelModules,\n });\n\n if (project?.sourceEffects) rebuilt.sourceEffects = project.sourceEffects;\n\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(\n \"effects-parse\",\n \"Parsing effect sources\",\n effectProgress.current,\n effectProgress.total,\n effectProgress.file,\n );\n } else if (effectProgress.phase === \"index-functions\") {\n progress(\n \"effects-index-functions\",\n \"Indexing effect functions\",\n effectProgress.current,\n effectProgress.total,\n );\n } else if (effectProgress.phase === \"analyze-calls\") {\n progress(\n \"effects-analyze-calls\",\n \"Resolving effect calls\",\n effectProgress.current,\n effectProgress.total,\n );\n } else if (effectProgress.phase === \"assemble-graph\") {\n progress(\n \"effects-assemble-graph\",\n \"Building effect graph\",\n effectProgress.current,\n effectProgress.total,\n );\n } else if (effectProgress.phase === \"resolve\") {\n progress(\n \"effects-resolve\",\n \"Linking effect dependencies\",\n effectProgress.current,\n effectProgress.total,\n );\n } else if (effectProgress.phase === \"propagate\") {\n progress(\n \"effects-propagate\",\n \"Propagating project effects\",\n effectProgress.current,\n effectProgress.total,\n );\n } else {\n progress(\n \"effects-summarize\",\n \"Finalizing project effects\",\n effectProgress.current,\n effectProgress.total,\n );\n }\n },\n fileHashes,\n previousEffectModules,\n workerPool ?? undefined,\n );\n\n project.sourceEffects = effectBuild.effects;\n cacheSession.effectModules = effectBuild.cacheModules;\n } else if (!cacheSession.effectModules) {\n cacheSession.effectModules = previousEffectModules;\n }\n\n if (options.analysisSession)\n options.analysisSession.effectModules =\n cacheSession.effectModules ?? previousEffectModules;\n\n const diagnostics: Diagnostic[] = [];\n const skippedFiles: string[] = [];\n const unverifiedFiles: string[] = [];\n let scannedFiles = 0;\n let scanCandidates = candidates;\n let incrementalReuse = false;\n\n const currentEffectModules =\n cacheSession.effectModules ?? previousEffectModules;\n\n if (\n canCacheWholeReport &&\n previousReport &&\n previousProject &&\n cacheHasSameFileSet(cacheSession) &&\n projectModelFeatureKey(previousProject) ===\n projectModelFeatureKey(project)\n ) {\n const affectedFiles = transitiveAffectedFiles(\n changedFiles,\n previousEffectModules,\n currentEffectModules,\n );\n\n diagnostics.push(\n ...previousReport.diagnostics.filter(\n (diagnostic) =>\n !affectedFiles.has(normalizeRelative(diagnostic.file)),\n ),\n );\n unverifiedFiles.push(\n ...(previousReport.unverifiedFiles ?? []).filter(\n (file) => !affectedFiles.has(normalizeRelative(file)),\n ),\n );\n\n scanCandidates = candidates.filter((candidate) => {\n const relativePath = normalizeRelative(\n candidate.relativePath ?? path.relative(root, candidate.absolutePath),\n );\n\n return affectedFiles.has(relativePath);\n });\n\n incrementalReuse = true;\n }\n\n let processedCandidates = 0;\n\n const scanLabel = incrementalReuse\n ? \"Scanning affected React files\"\n : \"Scanning React files\";\n\n progress(\"scan\", scanLabel, 0, scanCandidates.length);\n\n const applyResult = (result: ReactFileAnalysisResult): void => {\n recordReactFile(cacheSession, result.relativePath, result.isReactFile);\n\n if (result.scanned) scannedFiles += 1;\n\n diagnostics.push(...result.diagnostics);\n if (result.unverified) unverifiedFiles.push(result.relativePath);\n };\n\n const prepareCandidate = (\n candidate: ScanFileInput,\n ): {\n input: ReactFileAnalysisInput;\n tree?: ProjectEffectParseCacheEntry[\"tree\"];\n } | null => {\n const relativePath = normalizeRelative(\n candidate.relativePath ?? path.relative(root, candidate.absolutePath),\n );\n\n if (\n candidate.source === undefined &&\n !fs.existsSync(candidate.absolutePath)\n )\n return null;\n\n const forceScan = candidate.forceScan ?? targetStat.isFile();\n const cached = projectParseCache.get(relativePath);\n\n if (\n !forceScan &&\n !cached &&\n !changedFiles.includes(relativePath) &&\n knownReactFile(cacheSession, relativePath) === false\n )\n return null;\n\n const source =\n candidate.source ??\n cached?.source ??\n cacheSession.sources.get(relativePath) ??\n fs.readFileSync(candidate.absolutePath, \"utf8\");\n\n if (!forceScan && !REACT_SOURCE_MARKER.test(source)) {\n recordReactFile(cacheSession, relativePath, false);\n\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\n tree: cached && cached.source === source ? cached.tree : undefined,\n };\n };\n\n if (parallelEnabled) {\n const prepared = scanCandidates\n .map(prepareCandidate)\n .filter((value) => value !== null);\n\n if (workerPool && prepared.length >= 16) {\n let completed = scanCandidates.length - prepared.length;\n progress(\"scan\", scanLabel, completed, scanCandidates.length);\n\n const results = await workerPool.scanReactFiles(\n prepared.map((entry) => entry.input),\n options.onProgress\n ? (count, file) => {\n completed += count;\n\n progress(\n \"scan\",\n scanLabel,\n Math.min(completed, scanCandidates.length),\n scanCandidates.length,\n file,\n );\n }\n : undefined,\n );\n\n for (const result of results) applyResult(result);\n\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\n progress(\n \"scan\",\n scanLabel,\n processedCandidates,\n prepared.length,\n entry.input.relativePath,\n );\n }\n }\n } else {\n for (\n let candidateIndex = 0;\n candidateIndex < scanCandidates.length;\n candidateIndex += 1\n ) {\n const candidate = scanCandidates[candidateIndex];\n\n const relativePath = normalizeRelative(\n candidate.relativePath ?? path.relative(root, candidate.absolutePath),\n );\n\n if (deadlineAt !== undefined && performance.now() >= deadlineAt) {\n for (const remaining of scanCandidates.slice(candidateIndex)) {\n skippedFiles.push(\n normalizeRelative(\n remaining.relativePath ??\n path.relative(root, remaining.absolutePath),\n ),\n );\n }\n\n progress(\n \"scan\",\n scanLabel,\n processedCandidates,\n scanCandidates.length,\n relativePath,\n true,\n );\n\n break;\n }\n\n try {\n const prepared = prepareCandidate(candidate);\n\n if (!prepared) continue;\n\n applyResult(await analyzeReactFile(prepared.input, prepared.tree));\n } finally {\n processedCandidates = candidateIndex + 1;\n\n progress(\n \"scan\",\n scanLabel,\n processedCandidates,\n scanCandidates.length,\n relativePath,\n );\n }\n }\n }\n\n if (incrementalReuse) {\n scannedFiles = Object.values(cacheSession.files).filter(\n (state) => state.isReactFile === true,\n ).length;\n }\n\n diagnostics.sort(\n (a, b) =>\n a.file.localeCompare(b.file) ||\n a.location.line - b.location.line ||\n 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 unverifiedFiles: unverifiedFiles.length ? [...new Set(unverifiedFiles)].sort() : undefined,\n };\n\n if (canPersistCache)\n saveProjectCache(\n cacheSession,\n project,\n cacheSession.effectModules ?? cachedEffectModules(cacheSession),\n canCacheWholeReport && !report.partial ? reportCacheKey : undefined,\n canCacheWholeReport && !report.partial\n ? {\n scannedFiles: report.scannedFiles,\n candidateFiles: report.candidateFiles ?? candidates.length,\n diagnostics: report.diagnostics,\n unverifiedFiles: report.unverifiedFiles,\n }\n : undefined,\n );\n\n return report;\n } finally {\n workerPool?.close();\n }\n}\n",
51
+ "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\";\n\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\n bindingCandidateHooks: Array<\n [\n string,\n ProjectModel[\"bindingCandidateHooks\"] extends Map<string, infer V>\n ? V\n : never,\n ]\n >;\n\n externalCallbackModules: Array<\n [\n string,\n ProjectModel[\"externalCallbackModules\"] extends Map<string, infer V>\n ? V\n : never,\n ]\n >;\n\n bindingApiAlternatives: Array<[string, string]>;\n bindingCompatibleComponentProps: Array<[string, string[]]>;\n staticIterationTables: Array<[string, string[]]>;\n\n conditionalHookModes: Array<\n [\n string,\n ProjectModel[\"conditionalHookModes\"] extends Map<string, infer V>\n ? V\n : never,\n ]\n >;\n\n reactHookModules: Array<[string, boolean]>;\n sourceEffects: Array<[string, SerializedSourceEffectSummary]>;\n}\n\nexport interface CachedReportData {\n unverifiedFiles?: string[];\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 namespace: string;\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\nconst analyzerHashes = new Map<string, string>();\n\nfunction hashAnalyzerFile(\n hash: crypto.Hash,\n root: string,\n filename: string,\n): void {\n if (!fs.existsSync(filename)) return;\n\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\n const files: string[] = [];\n\n for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {\n const filename = path.join(directory, entry.name);\n\n if (entry.isDirectory()) files.push(...sourceFiles(filename));\n else if (entry.isFile() && entry.name.endsWith(\".ts\")) files.push(filename);\n }\n\n return files;\n}\n\nfunction currentAnalyzerHash(namespace = \"cli\"): string {\n const existing = analyzerHashes.get(namespace);\n\n if (existing) return existing;\n\n const hash = crypto.createHash(\"sha256\");\n\n let packageRoot = path.resolve(\n path.dirname(fileURLToPath(import.meta.url)),\n \"..\",\n );\n\n let bundledCli: string | null = null;\n\n try {\n const entrypoint = process.argv[1]\n ? fs.realpathSync(process.argv[1])\n : null;\n\n if (\n entrypoint &&\n path.basename(entrypoint) === \"cli.js\" &&\n path.basename(path.dirname(entrypoint)) === \"dist\"\n ) {\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 (namespace !== \"cli\") {\n const runtimeDir = path.dirname(fileURLToPath(import.meta.url));\n hashAnalyzerFile(hash, runtimeDir, path.join(runtimeDir, \"server.js\"));\n hashAnalyzerFile(hash, runtimeDir, path.join(runtimeDir, \"deep-worker.js\"));\n } else if (bundledCli) {\n hashAnalyzerFile(hash, packageRoot, bundledCli);\n\n hashAnalyzerFile(\n hash,\n packageRoot,\n path.join(path.dirname(bundledCli), \"scan-worker.js\"),\n );\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\n hashAnalyzerFile(\n hash,\n packageRoot,\n path.join(packageRoot, \"vendor\", \"tree-sitter-luau.wasm\"),\n );\n\n const result = hash.digest(\"hex\");\n analyzerHashes.set(namespace, result);\n\n return result;\n}\n\nfunction stableValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stableValue);\n\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\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)\n return path.resolve(process.env.REACT_LUAU_DOCTOR_CACHE_DIR);\n\n if (process.platform === \"win32\") {\n const base =\n process.env.LOCALAPPDATA ?? path.join(os.homedir(), \"AppData\", \"Local\");\n\n return path.join(base, \"react-luau-doctor\", \"Cache\");\n }\n\n if (process.platform === \"darwin\")\n return path.join(os.homedir(), \"Library\", \"Caches\", \"react-luau-doctor\");\n\n return path.join(\n process.env.XDG_CACHE_HOME ?? path.join(os.homedir(), \".cache\"),\n \"react-luau-doctor\",\n );\n}\n\nfunction projectCacheFilename(root: string, namespace = \"cli\"): string {\n const canonical =\n process.platform === \"win32\"\n ? path.resolve(root).toLowerCase()\n : path.resolve(root);\n\n return path.join(\n cacheBaseDirectory(),\n `${namespace === \"cli\" ? \"project\" : `project-${namespace}`}-${hashText(canonical).slice(0, 24)}.json`,\n );\n}\n\nfunction readPayload(\n filename: string,\n root: string,\n namespace = \"cli\",\n): ProjectCachePayload | null {\n try {\n const parsed = JSON.parse(\n fs.readFileSync(filename, \"utf8\"),\n ) as ProjectCachePayload;\n\n if (\n parsed.analyzerHash !== currentAnalyzerHash(namespace) ||\n path.resolve(parsed.root) !== path.resolve(root) ||\n !parsed.files ||\n typeof parsed.fingerprint !== \"string\"\n )\n return null;\n\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(\n previous: CachedFileState | undefined,\n stat: fs.Stats,\n): 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 namespace = \"cli\",\n): ProjectCacheSession {\n const cacheEnabled =\n enabled && process.env.REACT_LUAU_DOCTOR_DISABLE_CACHE !== \"1\";\n\n const filename = cacheEnabled ? projectCacheFilename(root, namespace) : null;\n const previous = filename ? readPayload(filename, root, namespace) : 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\n for (let index = 0; index < candidates.length; index += 1) {\n const candidate = candidates[index];\n\n const relativePath = normalizeRelative(\n candidate.relativePath ?? path.relative(root, candidate.absolutePath),\n );\n\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\n state = {\n hash,\n\n isReactFile:\n previousState?.hash === hash ? previousState.isReactFile : undefined,\n };\n } else {\n try {\n const stat = fs.statSync(candidate.absolutePath);\n\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\n state = {\n size: stat.size,\n mtimeMs: stat.mtimeMs,\n ctimeMs: stat.ctimeMs,\n hash,\n\n isReactFile:\n previousState?.hash === hash\n ? previousState.isReactFile\n : 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\n return {\n namespace,\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(\n session: ProjectCacheSession,\n candidates: ScanFileInput[],\n): ScanFileInput[] {\n return candidates.map((candidate) => {\n if (candidate.source !== undefined) return candidate;\n\n const relativePath = normalizeRelative(\n candidate.relativePath ??\n path.relative(session.root, candidate.absolutePath),\n );\n\n const cachedSource = session.sources.get(relativePath);\n\n if (cachedSource !== undefined)\n return { ...candidate, relativePath, source: cachedSource };\n\n try {\n const source = fs.readFileSync(candidate.absolutePath, \"utf8\");\n session.sources.set(relativePath, source);\n\n return { ...candidate, relativePath, source };\n } catch {\n return { ...candidate, relativePath };\n }\n });\n}\n\nfunction serializeSourceEffect(\n summary: SourceEffectModuleSummary,\n): SerializedSourceEffectSummary {\n return {\n effectfulMembers: [...summary.effectfulMembers].sort(),\n effectfulExport: summary.effectfulExport,\n mutatingMembers: [...summary.mutatingMembers].sort(),\n\n mutatingExportParameters: [...summary.mutatingExportParameters].sort(\n (a, b) => a - b,\n ),\n\n mutatingMemberParameters: [...summary.mutatingMemberParameters]\n .map(\n ([name, indexes]) =>\n [name, [...indexes].sort((a, b) => a - b)] as [string, number[]],\n )\n .sort(([left], [right]) => left.localeCompare(right)),\n\n localMutatingParameters: [...summary.localMutatingParameters]\n .map(\n ([name, indexes]) =>\n [name, [...indexes].sort((a, b) => a - b)] as [string, number[]],\n )\n .sort(([left], [right]) => left.localeCompare(right)),\n\n instanceFactories: [...summary.instanceFactories].sort(),\n };\n}\n\nfunction deserializeSourceEffect(\n summary: SerializedSourceEffectSummary,\n): 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\n mutatingMemberParameters: new Map(\n (summary.mutatingMemberParameters ?? []).map(([name, indexes]) => [\n name,\n new Set(indexes),\n ]),\n ),\n\n localMutatingParameters: new Map(\n (summary.localMutatingParameters ?? []).map(([name, indexes]) => [\n name,\n new Set(indexes),\n ]),\n ),\n\n instanceFactories: new Set(summary.instanceFactories),\n };\n}\n\nexport function serializeProjectModel(\n project: ProjectModel,\n): SerializedProjectModel {\n return {\n memoizedModules: [...project.memoizedModules],\n bindingCandidateHooks: [...project.bindingCandidateHooks],\n externalCallbackModules: [...project.externalCallbackModules],\n bindingApiAlternatives: [...project.bindingApiAlternatives],\n\n bindingCompatibleComponentProps: [\n ...project.bindingCompatibleComponentProps,\n ].map(([key, value]) => [key, [...value].sort()]),\n\n staticIterationTables: [...project.staticIterationTables].map(\n ([key, value]) => [key, [...value].sort()],\n ),\n\n conditionalHookModes: [...project.conditionalHookModes],\n reactHookModules: [...project.reactHookModules],\n\n sourceEffects: [...project.sourceEffects].map(([key, value]) => [\n key,\n serializeSourceEffect(value),\n ]),\n };\n}\n\nexport function deserializeProjectModel(\n project: SerializedProjectModel,\n): 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\n bindingCompatibleComponentProps: new Map(\n project.bindingCompatibleComponentProps.map(([key, value]) => [\n key,\n new Set(value),\n ]),\n ),\n\n staticIterationTables: new Map(\n project.staticIterationTables.map(([key, value]) => [\n key,\n new Set(value),\n ]),\n ),\n\n conditionalHookModes: new Map(project.conditionalHookModes),\n reactHookModules: new Map(project.reactHookModules ?? []),\n\n sourceEffects: new Map(\n project.sourceEffects.map(([key, value]) => [\n key,\n deserializeSourceEffect(value),\n ]),\n ),\n };\n}\n\nexport function cachedEffectModules(\n session: ProjectCacheSession,\n): Record<string, CachedSourceEffectModule> {\n return session.previous?.effectModules ?? {};\n}\n\nexport function previousProjectModel(\n session: ProjectCacheSession,\n): ProjectModel | null {\n if (!session.previous?.projectModel) return null;\n\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\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(\n session: ProjectCacheSession,\n): ProjectModel | null {\n if (!session.exact || !session.previous?.projectModel) return null;\n\n try {\n return deserializeProjectModel(session.previous.projectModel);\n } catch {\n return null;\n }\n}\n\nexport function previousCachedReport(\n session: ProjectCacheSession,\n key: string,\n): CachedReportData | null {\n const report = session.previous?.reports?.[key];\n\n if (!report) return null;\n\n return {\n scannedFiles: report.scannedFiles,\n candidateFiles: report.candidateFiles,\n diagnostics: report.diagnostics,\n unverifiedFiles: report.unverifiedFiles,\n };\n}\n\nexport function cachedReport(\n session: ProjectCacheSession,\n key: string,\n): CachedReportData | null {\n if (!session.exact) return null;\n\n const report = session.previous?.reports?.[key];\n\n if (!report) return null;\n\n return {\n scannedFiles: report.scannedFiles,\n candidateFiles: report.candidateFiles,\n diagnostics: report.diagnostics,\n unverifiedFiles: report.unverifiedFiles,\n };\n}\n\nexport function cacheHasSameFileSet(session: ProjectCacheSession): boolean {\n if (!session.previous) return false;\n\n const previousFiles = Object.keys(session.previous.files).sort();\n const currentFiles = Object.keys(session.files).sort();\n\n return (\n previousFiles.length === currentFiles.length &&\n previousFiles.every((file, index) => file === currentFiles[index])\n );\n}\n\nexport function changedProjectFiles(session: ProjectCacheSession): string[] {\n if (!session.previous) return Object.keys(session.files);\n\n const all = new Set([\n ...Object.keys(session.previous.files),\n ...Object.keys(session.files),\n ]);\n\n return [...all]\n .filter(\n (file) =>\n session.previous?.files[file]?.hash !== session.files[file]?.hash,\n )\n .sort();\n}\n\nexport function 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\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(\n (file) => modules.get(file)?.id ?? file.toLowerCase(),\n );\n\n const visitedIds = new Set(queue);\n\n while (queue.length > 0) {\n const moduleId = queue.shift()!;\n\n for (const importerFile of reverse.get(moduleId) ?? []) {\n if (!affected.has(importerFile)) affected.add(importerFile);\n\n const importerId = modules.get(importerFile)?.id;\n\n if (importerId && !visitedIds.has(importerId)) {\n visitedIds.add(importerId);\n queue.push(importerId);\n }\n }\n }\n\n return affected;\n}\n\nexport function knownReactFile(\n session: ProjectCacheSession,\n relativePath: string,\n): boolean | undefined {\n return session.files[normalizeRelative(relativePath)]?.isReactFile;\n}\n\nexport function recordReactFile(\n session: ProjectCacheSession,\n relativePath: string,\n isReactFile: boolean,\n): void {\n const state = session.files[normalizeRelative(relativePath)];\n\n if (state) state.isReactFile = isReactFile;\n}\n\nexport function saveProjectCache(\n session: ProjectCacheSession,\n project: ProjectModel,\n effectModules: Record<string, CachedSourceEffectModule> = session.previous\n ?.effectModules ?? {},\n reportKey?: string,\n report?: CachedReportData,\n): void {\n if (!session.enabled || !session.filename) return;\n\n const reports: Record<string, CachedReportEntry> = session.exact\n ? { ...(session.previous?.reports ?? {}) }\n : {};\n\n if (reportKey && report)\n reports[reportKey] = { ...report, lastUsedAt: Date.now() };\n\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\n writePayload(session.filename, {\n analyzerHash: currentAnalyzerHash(session.namespace),\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, namespace = \"cli\"): string {\n return projectCacheFilename(root, namespace);\n}\n",
52
+ "import crypto from \"node:crypto\";\r\nimport type { SyntaxTree } from \"./syntax\";\r\nimport { createRuleContext } from \"./ast/context\";\r\nimport { buildReactModel } from \"./ast/react-model\";\r\nimport { effectiveSeverity } from \"./config\";\r\nimport { createInlineSuppressionChecker } from \"./inline-disables\";\r\nimport { parseLuau } from \"./parser\";\r\nimport { rules } from \"./rules\";\r\nimport { parseErrors } from \"./rules/parse-errors\";\r\n\r\nimport type {\r\n Category,\r\n Diagnostic,\r\n DiagnosticInput,\r\n DoctorConfig,\r\n ProjectModel,\r\n Severity,\r\n SourceFile,\r\n RuleDefinition,\r\n} from \"./types\";\r\n\r\nconst SEVERITY_RANK: Record<Severity, number> = {\r\n suggestion: 0,\r\n warning: 1,\r\n error: 2,\r\n};\r\n\r\nexport interface ReactFileAnalysisInput {\r\n absolutePath: string;\r\n relativePath: string;\r\n source: string;\r\n forceScan: boolean;\r\n project: ProjectModel;\r\n config: DoctorConfig;\r\n categories?: Category[];\r\n minSeverity: Severity;\r\n respectInlineDisables: boolean;\r\n lsp?: boolean;\r\n}\r\n\r\nexport interface ReactFileAnalysisResult {\r\n relativePath: string;\r\n isReactFile: boolean;\r\n scanned: boolean;\r\n diagnostics: Diagnostic[];\r\n unverified?: boolean;\r\n}\r\n\r\nfunction diagnosticId(\r\n file: string,\r\n rule: string,\r\n startIndex: number,\r\n message: string,\r\n): string {\r\n return crypto\r\n .createHash(\"sha256\")\r\n .update(`${file}\\0${rule}\\0${startIndex}\\0${message}`)\r\n .digest(\"hex\")\r\n .slice(0, 16);\r\n}\r\n\r\nfunction nodeLocation(node: DiagnosticInput[\"node\"]): Diagnostic[\"location\"] {\r\n return {\r\n line: node.startPosition.row + 1,\r\n column: node.startPosition.column + 1,\r\n endLine: node.endPosition.row + 1,\r\n endColumn: node.endPosition.column + 1,\r\n };\r\n}\r\n\r\nfunction sameLocation(\r\n left: Diagnostic[\"location\"],\r\n right: Diagnostic[\"location\"],\r\n): boolean {\r\n return (\r\n left.line === right.line &&\r\n left.column === right.column &&\r\n left.endLine === right.endLine &&\r\n left.endColumn === right.endColumn\r\n );\r\n}\r\n\r\nfunction removeSupersededDiagnostics(diagnostics: Diagnostic[]): Diagnostic[] {\r\n return diagnostics.filter((diagnostic) => {\r\n if (diagnostic.rule !== \"react-luau/rerender-high-frequency-state\")\r\n return true;\r\n\r\n return !diagnostics.some(\r\n (candidate) =>\r\n candidate.rule === \"react-luau/prefer-binding-over-state\" &&\r\n sameLocation(candidate.location, diagnostic.location) &&\r\n SEVERITY_RANK[candidate.severity] >= SEVERITY_RANK[diagnostic.severity],\r\n );\r\n });\r\n}\r\n\r\nfunction toDiagnostic(\r\n file: SourceFile,\r\n ruleId: string,\r\n category: Diagnostic[\"category\"],\r\n severity: Severity,\r\n input: DiagnosticInput,\r\n): Diagnostic {\r\n const node = input.node;\r\n const highlights = input.highlights?.map(nodeLocation);\r\n\r\n return {\r\n id: diagnosticId(file.relativePath, ruleId, node.startIndex, input.message),\r\n rule: ruleId,\r\n category,\r\n severity: input.severity ?? severity,\r\n message: input.message,\r\n summary: input.summary,\r\n explanation: input.explanation,\r\n help: input.help,\r\n caveat: input.caveat,\r\n file: file.relativePath,\r\n location: nodeLocation(node),\r\n highlights: highlights && highlights.length > 0 ? highlights : undefined,\r\n fixPreview: input.fixPreview,\r\n\r\n editorRanges: input.editorRanges?.map(({ node, summary }) => ({\r\n location: nodeLocation(node),\r\n summary,\r\n })),\r\n };\r\n}\r\n\r\nexport async function analyzeReactFile(\r\n input: ReactFileAnalysisInput,\r\n tree?: SyntaxTree,\r\n selectedRules: readonly RuleDefinition[] = rules,\r\n): Promise<ReactFileAnalysisResult> {\r\n const parsedTree = tree ?? (await parseLuau(input.source));\r\n\r\n try {\r\n const model = buildReactModel(parsedTree.rootNode, input.project);\r\n\r\n if (!input.forceScan && !model.isReactFile) {\r\n return {\r\n relativePath: input.relativePath,\r\n isReactFile: false,\r\n scanned: false,\r\n diagnostics: [],\r\n };\r\n }\r\n\r\n const file: SourceFile = {\r\n absolutePath: input.absolutePath,\r\n relativePath: input.relativePath,\r\n source: input.source,\r\n tree: parsedTree,\r\n root: parsedTree.rootNode,\r\n model,\r\n project: input.project,\r\n };\r\n\r\n const context = createRuleContext(file);\r\n const syntaxFindings = parsedTree.rootNode.hasError ? parseErrors.run(context) : [];\r\n\r\n const categorySet =\r\n input.categories && input.categories.length > 0\r\n ? new Set(input.categories)\r\n : null;\r\n\r\n const isSuppressed = input.respectInlineDisables\r\n ? createInlineSuppressionChecker(input.source)\r\n : () => false;\r\n\r\n const diagnostics: Diagnostic[] = [];\r\n\r\n for (const rule of selectedRules) {\r\n if (input.lsp && rule.lspEnabled === false) continue;\r\n if (categorySet && !categorySet.has(rule.category)) continue;\r\n\r\n const severity = effectiveSeverity(rule.severity, rule.id, input.config);\r\n\r\n if (!severity) continue;\r\n\r\n const findings = rule.id === parseErrors.id ? syntaxFindings : rule.run(context);\r\n\r\n for (const finding of findings) {\r\n const configuredSeverity = input.config.rules?.[rule.id];\r\n\r\n const diagnostic = toDiagnostic(\r\n file,\r\n rule.id,\r\n rule.category,\r\n severity,\r\n {\r\n ...finding,\r\n\r\n severity:\r\n configuredSeverity && configuredSeverity !== \"off\"\r\n ? severity\r\n : finding.severity,\r\n },\r\n );\r\n\r\n if (\r\n SEVERITY_RANK[diagnostic.severity] < SEVERITY_RANK[input.minSeverity]\r\n )\r\n continue;\r\n\r\n if (isSuppressed(diagnostic.rule, diagnostic.location.line)) continue;\r\n\r\n diagnostics.push(diagnostic);\r\n }\r\n\r\n if (rule.id === \"react-luau/parse-error\" && findings.length > 0) break;\r\n }\r\n\r\n const filteredDiagnostics = removeSupersededDiagnostics(diagnostics);\r\n\r\n return {\r\n relativePath: input.relativePath,\r\n isReactFile: model.isReactFile,\r\n scanned: true,\r\n diagnostics: filteredDiagnostics,\r\n unverified: syntaxFindings.length > 0,\r\n };\r\n } finally {\r\n if (!tree) parsedTree.delete?.();\r\n }\r\n}\r\n",
49
53
  "import type { SyntaxNode } from \"../syntax\";\r\nimport type { FunctionInfo, RuleContext, SourceFile } from \"../types\";\r\nimport { nodeKey, normalizeExpressionText, walk } from \"./walk\";\r\n\r\nexport function createRuleContext(file: SourceFile): RuleContext {\r\n // buildReactModel already materialized the root traversal. Reuse those node\r\n // wrappers here and only materialize subtrees lazily when a rule needs one.\r\n const allNodes = file.model.allNodes;\r\n const calls = allNodes.filter((node) => node.type === \"function_call\");\r\n const traversalCache = new Map<number, SyntaxNode[]>([[file.root.id, allNodes]]);\r\n const callPathCache = new Map<number, string | null>();\r\n const resolvedCallPathCache = new Map<string, string>();\r\n const nearestFunctionCache = new Map<number, FunctionInfo | null>();\r\n const componentCache = new Map<number, FunctionInfo | null>();\r\n\r\n const traversal = (node: SyntaxNode): SyntaxNode[] => {\r\n const key = node.id;\r\n const existing = traversalCache.get(key);\r\n if (existing) return existing;\r\n const result = walk(node);\r\n traversalCache.set(key, result);\r\n return result;\r\n };\r\n\r\n const getCallPath = (node: SyntaxNode): string | null => {\r\n if (node.type !== \"function_call\") return null;\r\n const key = node.id;\r\n if (callPathCache.has(key)) return callPathCache.get(key) ?? null;\r\n const name = node.childForFieldName(\"name\");\r\n const result = name ? normalizeExpressionText(name.text) : null;\r\n callPathCache.set(key, result);\r\n return result;\r\n };\r\n\r\n const resolveCallPath = (value: string): string => {\r\n const normalized = normalizeExpressionText(value);\r\n const cached = resolvedCallPathCache.get(normalized);\r\n if (cached) return cached;\r\n\r\n const direct = file.model.aliases.get(normalized);\r\n if (direct) {\r\n resolvedCallPathCache.set(normalized, direct);\r\n return direct;\r\n }\r\n\r\n const namespaceMatch = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.(.+)$/);\r\n let result = normalized;\r\n if (namespaceMatch && file.model.reactNamespaces.has(namespaceMatch[1])) {\r\n result = `React.${namespaceMatch[2]}`;\r\n } else if (namespaceMatch && file.model.reactRobloxNamespaces.has(namespaceMatch[1])) {\r\n result = `ReactRoblox.${namespaceMatch[2]}`;\r\n }\r\n resolvedCallPathCache.set(normalized, result);\r\n return result;\r\n };\r\n\r\n const callArguments = (node: SyntaxNode): SyntaxNode[] => {\r\n return node.childForFieldName(\"arguments\")?.namedChildren ?? [];\r\n };\r\n\r\n const nearestFunction = (node: SyntaxNode): FunctionInfo | null => {\r\n const key = node.id;\r\n if (nearestFunctionCache.has(key)) return nearestFunctionCache.get(key) ?? null;\r\n\r\n const visited: number[] = [key];\r\n let current = node.parent;\r\n let result: FunctionInfo | null = null;\r\n while (current) {\r\n const info = file.model.functionByNode.get(nodeKey(current));\r\n if (info) {\r\n result = info;\r\n break;\r\n }\r\n if (nearestFunctionCache.has(current.id)) {\r\n result = nearestFunctionCache.get(current.id) ?? null;\r\n break;\r\n }\r\n visited.push(current.id);\r\n current = current.parent;\r\n }\r\n\r\n for (const visitedKey of visited) nearestFunctionCache.set(visitedKey, result);\r\n return result;\r\n };\r\n\r\n const containingComponent = (node: SyntaxNode): FunctionInfo | null => {\r\n const key = node.id;\r\n if (componentCache.has(key)) return componentCache.get(key) ?? null;\r\n\r\n const visited: number[] = [key];\r\n let current = node.parent;\r\n let result: FunctionInfo | null = null;\r\n while (current) {\r\n const info = file.model.functionByNode.get(nodeKey(current));\r\n if (info?.isComponent) {\r\n result = info;\r\n break;\r\n }\r\n if (componentCache.has(current.id)) {\r\n result = componentCache.get(current.id) ?? null;\r\n break;\r\n }\r\n visited.push(current.id);\r\n current = current.parent;\r\n }\r\n\r\n for (const visitedKey of visited) componentCache.set(visitedKey, result);\r\n return result;\r\n };\r\n\r\n const isDirectlyExecutedInFunction = (node: SyntaxNode, fn: FunctionInfo): boolean => nearestFunction(node) === fn;\r\n\r\n return {\r\n ...file,\r\n findCalls: () => calls,\r\n getCallPath,\r\n resolveCallPath,\r\n callArguments,\r\n nearestFunction,\r\n containingComponent,\r\n isDirectlyExecutedInFunction,\r\n walk: (node = file.root) => traversal(node),\r\n };\r\n}\r\n",
50
54
  "import { normalizeRequireTarget, resolveModuleReference } from \"../module-resolution\";\r\nimport type { SyntaxNode } from \"../syntax\";\r\nimport type { FunctionInfo, ProjectModel, ReactModel, StateBinding } from \"../types\";\r\nimport { nodeKey, normalizeExpressionText, parameterBindingNames, sameNode, walk } from \"./walk\";\r\n\r\nconst REACT_HOOKS = new Set([\r\n \"useState\",\r\n \"useEffect\",\r\n \"useLayoutEffect\",\r\n \"useMemo\",\r\n \"useCallback\",\r\n \"useContext\",\r\n \"useReducer\",\r\n \"useRef\",\r\n \"useImperativeHandle\",\r\n \"useBinding\",\r\n]);\r\n\r\nconst REACT_MEMBERS = new Set([...REACT_HOOKS, \"createElement\", \"createContext\", \"createBinding\", \"memo\", \"joinBindings\"]);\r\nconst STABLE_CUSTOM_HOOK_RETURN = /^(?:set[A-Z0-9_]|dispatch$|send$|emit$|fire$)/i;\r\nconst INSTANCE_FACTORY_MEMBERS = new Set([\r\n \"Clone\",\r\n \"FindFirstAncestor\",\r\n \"FindFirstAncestorOfClass\",\r\n \"FindFirstAncestorWhichIsA\",\r\n \"FindFirstChild\",\r\n \"FindFirstChildOfClass\",\r\n \"FindFirstChildWhichIsA\",\r\n \"GetButton\",\r\n \"GetMouse\",\r\n \"GetService\",\r\n \"WaitForChild\",\r\n]);\r\nconst STABLE_ENGINE_FACTORY_MEMBERS = new Set([\"GetMouse\", \"GetService\"]);\r\n\r\nfunction identifiersFromParameters(node: SyntaxNode | null): string[] {\r\n return parameterBindingNames(node);\r\n}\r\n\r\nfunction getFunctionName(node: SyntaxNode): string | null {\r\n if (node.type === \"function_declaration\") {\r\n return node.childForFieldName(\"name\")?.text ?? null;\r\n }\r\n\r\n if (node.type !== \"function_definition\") return null;\r\n let owner = node.parent;\r\n while (owner && owner.type !== \"variable_declaration\") {\r\n if (owner.type === \"function_definition\" || owner.type === \"function_declaration\") return null;\r\n owner = owner.parent;\r\n }\r\n if (!owner) return null;\r\n\r\n const prefix = owner.text.slice(0, Math.max(0, node.startIndex - owner.startIndex));\r\n const directMatch = prefix.match(/\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*$/s);\r\n if (directMatch) return directMatch[1];\r\n\r\n const wrappedMatch = prefix.match(/\\blocal\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*[A-Za-z_][A-Za-z0-9_.]*\\s*\\(\\s*$/s);\r\n return wrappedMatch?.[1] ?? null;\r\n}\r\n\r\nfunction requireTargetContainsModule(target: string, moduleName: string): boolean {\r\n return (target.match(/[A-Za-z_][A-Za-z0-9_]*/g) ?? [])\r\n .some((token) => token.toLowerCase() === moduleName.toLowerCase());\r\n}\r\n\r\nfunction resolvePath(\r\n rawPath: string,\r\n aliases: Map<string, string>,\r\n reactNamespaces: Set<string>,\r\n reactRobloxNamespaces: Set<string>,\r\n): string {\r\n const normalized = normalizeExpressionText(rawPath);\r\n const direct = aliases.get(normalized);\r\n if (direct) return direct;\r\n\r\n const namespaceMatch = normalized.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.(.+)$/);\r\n if (namespaceMatch && reactNamespaces.has(namespaceMatch[1])) return `React.${namespaceMatch[2]}`;\r\n if (namespaceMatch && reactRobloxNamespaces.has(namespaceMatch[1])) return `ReactRoblox.${namespaceMatch[2]}`;\r\n return normalized;\r\n}\r\n\r\nfunction directCalls(node: SyntaxNode): SyntaxNode[] {\r\n const result: SyntaxNode[] = [];\r\n const pending = [...node.namedChildren];\r\n while (pending.length > 0) {\r\n const child = pending.pop()!;\r\n if (child.type === \"function_definition\" || child.type === \"function_declaration\") continue;\r\n if (child.type === \"function_call\") result.push(child);\r\n pending.push(...child.namedChildren);\r\n }\r\n return result;\r\n}\r\n\r\nfunction hasDirectCreateElementCall(\r\n node: SyntaxNode,\r\n aliases: Map<string, string>,\r\n reactNamespaces: Set<string>,\r\n reactRobloxNamespaces: Set<string>,\r\n): boolean {\r\n return directCalls(node).some((call) => {\r\n const name = call.childForFieldName(\"name\")?.text ?? \"\";\r\n const path = resolvePath(name, aliases, reactNamespaces, reactRobloxNamespaces);\r\n return path === \"React.createElement\" || path === \"ReactRoblox.createPortal\";\r\n });\r\n}\r\n\r\nfunction hasDirectHookCall(\r\n node: SyntaxNode,\r\n aliases: Map<string, string>,\r\n reactNamespaces: Set<string>,\r\n reactRobloxNamespaces: Set<string>,\r\n importedHookKinds: Map<string, boolean>,\r\n): boolean {\r\n return directCalls(node).some((call) => {\r\n const name = call.childForFieldName(\"name\")?.text ?? \"\";\r\n const path = resolvePath(name, aliases, reactNamespaces, reactRobloxNamespaces);\r\n const normalizedName = normalizeExpressionText(name);\r\n const importedKind = importedHookKinds.get(normalizedName);\r\n if (importedKind !== undefined) return importedKind;\r\n const final = path.split(/[.:]/).at(-1) ?? \"\";\r\n return /^use[A-Z0-9_]/.test(final);\r\n });\r\n}\r\n\r\nfunction isMemoWrappedFunction(\r\n node: SyntaxNode,\r\n aliases: Map<string, string>,\r\n reactNamespaces: Set<string>,\r\n): boolean {\r\n const argumentsNode = node.parent;\r\n const call = argumentsNode?.type === \"arguments\" ? argumentsNode.parent : null;\r\n if (!call || call.type !== \"function_call\") return false;\r\n const name = call.childForFieldName(\"name\")?.text ?? \"\";\r\n return resolvePath(name, aliases, reactNamespaces, new Set()) === \"React.memo\";\r\n}\r\n\r\nfunction isModuleReturnedFunction(node: SyntaxNode): boolean {\r\n const expressionList = node.parent;\r\n const returnStatement = expressionList?.type === \"expression_list\" ? expressionList.parent : null;\r\n if (!returnStatement || returnStatement.type !== \"return_statement\") return false;\r\n let current = returnStatement.parent;\r\n while (current) {\r\n if (current.type === \"function_definition\" || current.type === \"function_declaration\") return false;\r\n current = current.parent;\r\n }\r\n return true;\r\n}\r\n\r\nfunction collectDirectLocals(body: SyntaxNode | null): Set<string> {\r\n const locals = new Set<string>();\r\n if (!body) return locals;\r\n\r\n for (const child of body.namedChildren) {\r\n if (child.type === \"variable_declaration\") {\r\n const beforeEquals = child.text.split(\"=\")[0] ?? \"\";\r\n const localPart = beforeEquals.replace(/^\\s*local\\s+/, \"\");\r\n for (const piece of localPart.split(\",\")) {\r\n const match = piece.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)/);\r\n if (match) locals.add(match[1]);\r\n }\r\n } else if (child.type === \"function_declaration\") {\r\n const name = child.childForFieldName(\"name\")?.text;\r\n if (name && /^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) locals.add(name);\r\n }\r\n }\r\n\r\n return locals;\r\n}\r\n\r\nfunction nearestFunctionInfo(node: SyntaxNode, functionByNode: Map<number, FunctionInfo>): FunctionInfo | null {\r\n let current = node.parent;\r\n while (current) {\r\n const info = functionByNode.get(nodeKey(current));\r\n if (info) return info;\r\n current = current.parent;\r\n }\r\n return null;\r\n}\r\n\r\nfunction declarationCall(node: SyntaxNode): SyntaxNode | null {\r\n if (node.type !== \"variable_declaration\") return null;\r\n for (const child of walk(node)) {\r\n if (child.type === \"function_call\") return child;\r\n if (!sameNode(child, node) && (child.type === \"function_definition\" || child.type === \"function_declaration\")) return null;\r\n }\r\n return null;\r\n}\r\n\r\nfunction declarationNames(node: SyntaxNode): string[] {\r\n if (node.type !== \"variable_declaration\") return [];\r\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\r\n const variableList = assignment?.namedChildren.find((child) => child.type === \"variable_list\");\r\n return variableList?.namedChildren.filter((child) => child.type === \"identifier\").map((child) => child.text) ?? [];\r\n}\r\n\r\nfunction declarationExpressions(node: SyntaxNode): SyntaxNode[] {\r\n if (node.type !== \"variable_declaration\") return [];\r\n const assignment = node.namedChildren.find((child) => child.type === \"assignment_statement\");\r\n const expressionList = assignment?.namedChildren.find((child) => child.type === \"expression_list\");\r\n return expressionList?.namedChildren ?? [];\r\n}\r\n\r\nfunction isSyntacticallyStableInitializer(node: SyntaxNode | undefined): boolean {\r\n if (!node) return false;\r\n return [\"nil\", \"true\", \"false\", \"number\", \"string\", \"string_content\"].includes(node.type)\r\n || /^(?:nil|true|false|-?\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)$/i.test(node.text.trim());\r\n}\r\n\r\n\r\nfunction finalCallMember(path: string): string {\r\n return path.split(/[.:]/).at(-1) ?? path;\r\n}\r\n\r\nfunction expressionCreatesInstance(\r\n node: SyntaxNode | undefined,\r\n aliases: Map<string, string>,\r\n reactNamespaces: Set<string>,\r\n reactRobloxNamespaces: Set<string>,\r\n): boolean {\r\n if (!node) return false;\r\n const text = node.text.trim();\r\n if (/^(?:workspace|game|script)(?:\\.|:|$)/.test(text)) return true;\r\n\r\n for (const candidate of walk(node)) {\r\n if (candidate.type !== \"function_call\") continue;\r\n const rawPath = candidate.childForFieldName(\"name\")?.text ?? \"\";\r\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\r\n if (path === \"Instance.new\" || INSTANCE_FACTORY_MEMBERS.has(finalCallMember(path))) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction expressionIsStableEngineObject(\r\n node: SyntaxNode | undefined,\r\n aliases: Map<string, string>,\r\n reactNamespaces: Set<string>,\r\n reactRobloxNamespaces: Set<string>,\r\n): boolean {\r\n if (!node) return false;\r\n const calls = [...walk(node)].filter((candidate) => candidate.type === \"function_call\");\r\n if (calls.length !== 1) return false;\r\n const rawPath = calls[0].childForFieldName(\"name\")?.text ?? \"\";\r\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\r\n return STABLE_ENGINE_FACTORY_MEMBERS.has(finalCallMember(path));\r\n}\r\n\r\nfunction memoReturnsInstance(\r\n callback: SyntaxNode | undefined,\r\n aliases: Map<string, string>,\r\n reactNamespaces: Set<string>,\r\n reactRobloxNamespaces: Set<string>,\r\n): boolean {\r\n if (!callback || callback.type !== \"function_definition\") return false;\r\n for (const candidate of walk(callback)) {\r\n if (candidate.type !== \"return_statement\") continue;\r\n if (expressionCreatesInstance(candidate, aliases, reactNamespaces, reactRobloxNamespaces)) return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction isEmptyDependencyTable(node: SyntaxNode | undefined): boolean {\r\n return Boolean(node?.type === \"table_constructor\" && node.namedChildren.every((child) => child.type !== \"field\"));\r\n}\r\n\r\n\r\nfunction importedHookKinds(\r\n declarations: SyntaxNode[],\r\n project: ProjectModel | undefined,\r\n): Map<string, boolean> {\r\n const result = new Map<string, boolean>();\r\n if (!project) return result;\r\n\r\n for (const declaration of declarations) {\r\n const match = declaration.text.match(\r\n /^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s,\r\n );\r\n if (!match || !/^use[A-Z0-9_]/.test(match[1])) continue;\r\n const kind = resolveModuleReference(\r\n normalizeRequireTarget(match[2]),\r\n project.reactHookModules,\r\n );\r\n if (kind !== null) result.set(match[1], kind);\r\n }\r\n return result;\r\n}\r\n\r\nexport function buildReactModel(root: SyntaxNode, project?: ProjectModel): ReactModel {\r\n const reactNamespaces = new Set<string>();\r\n const reactRobloxNamespaces = new Set<string>();\r\n const aliases = new Map<string, string>();\r\n const stateSetters = new Map<string, string>();\r\n const stateValues = new Map<string, string>();\r\n const stateBindings: StateBinding[] = [];\r\n const refVariables = new Set<string>();\r\n const bindingSetters = new Set<string>();\r\n const stableVariables = new Set<string>();\r\n const refVariablesByFunction = new Map<number, Set<string>>();\r\n const stableVariablesByFunction = new Map<number, Set<string>>();\r\n const externalMutableVariablesByFunction = new Map<number, Set<string>>();\r\n const instanceVariablesByFunction = new Map<number, Set<string>>();\r\n\r\n const allNodes = [...walk(root)];\r\n const declarations = allNodes.filter((node) => node.type === \"variable_declaration\");\r\n const projectHookKinds = importedHookKinds(declarations, project);\r\n let isReactFile = false;\r\n\r\n for (const declaration of declarations) {\r\n const text = declaration.text;\r\n const requireMatch = text.match(/^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*require\\s*\\((.*?)\\)\\s*$/s);\r\n if (!requireMatch) continue;\r\n const [, localName, target] = requireMatch;\r\n if (requireTargetContainsModule(target, \"ReactRoblox\")) {\r\n reactRobloxNamespaces.add(localName);\r\n isReactFile = true;\r\n } else if (requireTargetContainsModule(target, \"React\")) {\r\n reactNamespaces.add(localName);\r\n isReactFile = true;\r\n }\r\n }\r\n\r\n for (const node of allNodes) {\r\n if (node.type !== \"function_call\") continue;\r\n const rawPath = normalizeExpressionText(node.childForFieldName(\"name\")?.text ?? \"\");\r\n const memberMatch = rawPath.match(/^([A-Za-z_][A-Za-z0-9_]*)\\.([A-Za-z_][A-Za-z0-9_]*)$/);\r\n if (!memberMatch) continue;\r\n const [, namespace, member] = memberMatch;\r\n if (namespace === \"React\" && REACT_MEMBERS.has(member)) {\r\n reactNamespaces.add(namespace);\r\n isReactFile = true;\r\n } else if (namespace === \"ReactRoblox\" && [\"createRoot\", \"createPortal\"].includes(member)) {\r\n reactRobloxNamespaces.add(namespace);\r\n isReactFile = true;\r\n }\r\n }\r\n\r\n for (const declaration of declarations) {\r\n const text = declaration.text;\r\n const aliasMatch = text.match(/^\\s*local\\s+([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*([A-Za-z_][A-Za-z0-9_]*)\\.([A-Za-z_][A-Za-z0-9_]*)\\s*$/s);\r\n if (!aliasMatch) continue;\r\n const [, localName, namespace, member] = aliasMatch;\r\n if (reactNamespaces.has(namespace) && REACT_MEMBERS.has(member)) aliases.set(localName, `React.${member}`);\r\n if (reactRobloxNamespaces.has(namespace) && [\"createRoot\", \"createPortal\"].includes(member)) {\r\n aliases.set(localName, `ReactRoblox.${member}`);\r\n }\r\n }\r\n\r\n const functions: FunctionInfo[] = [];\r\n const functionByNode = new Map<number, FunctionInfo>();\r\n\r\n for (const node of allNodes) {\r\n if (node.type !== \"function_declaration\" && node.type !== \"function_definition\") continue;\r\n const name = getFunctionName(node);\r\n const body = node.childForFieldName(\"body\");\r\n const parameters = identifiersFromParameters(node.childForFieldName(\"parameters\"));\r\n const info: FunctionInfo = {\r\n node,\r\n body,\r\n name,\r\n parameters,\r\n isHook: Boolean(isReactFile && name && /^use[A-Z0-9_]/.test(name)),\r\n isComponent: false,\r\n };\r\n functions.push(info);\r\n functionByNode.set(nodeKey(node), info);\r\n }\r\n\r\n const functionsBySimpleName = new Map<string, FunctionInfo[]>();\r\n for (const info of functions) {\r\n if (!info.name || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(info.name)) continue;\r\n const existing = functionsBySimpleName.get(info.name) ?? [];\r\n existing.push(info);\r\n functionsBySimpleName.set(info.name, existing);\r\n }\r\n\r\n for (const info of functions) {\r\n if (!isReactFile || !info.body || info.isHook) continue;\r\n const simplePascalName = Boolean(info.name && /^[A-Z][A-Za-z0-9_]*$/.test(info.name));\r\n const hasHooks = hasDirectHookCall(\r\n info.body,\r\n aliases,\r\n reactNamespaces,\r\n reactRobloxNamespaces,\r\n projectHookKinds,\r\n );\r\n const renders = hasDirectCreateElementCall(info.body, aliases, reactNamespaces, reactRobloxNamespaces);\r\n if (hasHooks || isMemoWrappedFunction(info.node, aliases, reactNamespaces) || (simplePascalName && renders)) {\r\n info.isComponent = true;\r\n } else if (!info.name && isModuleReturnedFunction(info.node) && hasHooks) {\r\n info.isComponent = true;\r\n }\r\n }\r\n\r\n for (const call of allNodes) {\r\n if (call.type !== \"function_call\") continue;\r\n const rawPath = call.childForFieldName(\"name\")?.text ?? \"\";\r\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\r\n if (path !== \"React.createElement\") continue;\r\n const element = call.childForFieldName(\"arguments\")?.namedChildren[0]?.text.trim() ?? \"\";\r\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(element)) continue;\r\n for (const info of functionsBySimpleName.get(element) ?? []) info.isComponent = true;\r\n }\r\n\r\n const addScopedVariable = (map: Map<number, Set<string>>, owner: FunctionInfo | null, name: string): void => {\r\n if (!owner) return;\r\n const key = nodeKey(owner.node);\r\n const names = map.get(key) ?? new Set<string>();\r\n names.add(name);\r\n map.set(key, names);\r\n };\r\n\r\n for (const declaration of declarations) {\r\n const names = declarationNames(declaration);\r\n const expressions = declarationExpressions(declaration);\r\n const owner = nearestFunctionInfo(declaration, functionByNode);\r\n\r\n for (let index = 0; index < names.length; index += 1) {\r\n const expression = expressions[index] ?? expressions[0];\r\n if (isSyntacticallyStableInitializer(expression) || expressionIsStableEngineObject(expression, aliases, reactNamespaces, reactRobloxNamespaces)) {\r\n stableVariables.add(names[index]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[index]);\r\n }\r\n if (expressionCreatesInstance(expression, aliases, reactNamespaces, reactRobloxNamespaces)) {\r\n addScopedVariable(externalMutableVariablesByFunction, owner, names[index]);\r\n addScopedVariable(instanceVariablesByFunction, owner, names[index]);\r\n }\r\n }\r\n\r\n const call = declarationCall(declaration);\r\n if (!call) continue;\r\n const rawPath = call.childForFieldName(\"name\")?.text ?? \"\";\r\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\r\n const args = call.childForFieldName(\"arguments\")?.namedChildren ?? [];\r\n\r\n if (path === \"React.joinBindings\" && names.length >= 1) {\r\n stableVariables.add(names[0]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\r\n addScopedVariable(externalMutableVariablesByFunction, owner, names[0]);\r\n } else if (path === \"React.useState\" && names.length >= 2) {\r\n const [valueName, setterName] = names;\r\n stateSetters.set(setterName, valueName);\r\n stateValues.set(valueName, setterName);\r\n stableVariables.add(setterName);\r\n addScopedVariable(stableVariablesByFunction, owner, setterName);\r\n stateBindings.push({\r\n valueName,\r\n setterName,\r\n declaration,\r\n call,\r\n initializer: args[0] ?? null,\r\n owner,\r\n });\r\n } else if (path === \"React.useReducer\" && names.length >= 2) {\r\n stableVariables.add(names[1]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\r\n } else if (path === \"React.useBinding\" && names.length >= 1) {\r\n stableVariables.add(names[0]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\r\n if (names.length >= 2) {\r\n stableVariables.add(names[1]);\r\n bindingSetters.add(names[1]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\r\n }\r\n } else if (path === \"React.useMemo\" && names.length >= 1) {\r\n if (isEmptyDependencyTable(args[1])) {\r\n stableVariables.add(names[0]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\r\n }\r\n if (memoReturnsInstance(args[0], aliases, reactNamespaces, reactRobloxNamespaces)) {\r\n addScopedVariable(externalMutableVariablesByFunction, owner, names[0]);\r\n addScopedVariable(instanceVariablesByFunction, owner, names[0]);\r\n }\r\n } else if (path === \"React.useCallback\" && names.length >= 1 && isEmptyDependencyTable(args[1])) {\r\n // Empty-dependency callbacks keep a stable identity. Their own stale captures are\r\n // diagnosed on the useCallback dependency table instead of cascading into every\r\n // effect that consumes the callback.\r\n stableVariables.add(names[0]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\r\n } else if (path === \"React.useRef\" && names.length >= 1) {\r\n stableVariables.add(names[0]);\r\n refVariables.add(names[0]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\r\n addScopedVariable(refVariablesByFunction, owner, names[0]);\r\n } else {\r\n const final = path.split(/[.:]/).at(-1) ?? \"\";\r\n if (/^use[A-Z0-9_]/.test(final)) {\r\n for (const name of names.slice(1)) {\r\n if (!STABLE_CUSTOM_HOOK_RETURN.test(name)) continue;\r\n stableVariables.add(name);\r\n addScopedVariable(stableVariablesByFunction, owner, name);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // React state/binding hooks can be assigned into previously declared locals.\r\n // The setter/Binding contracts are still stable even when the declaration and hook\r\n // call are split across statements. Rules-of-hooks separately reports conditional calls.\r\n for (const assignment of allNodes) {\r\n if (assignment.type !== \"assignment_statement\" || assignment.parent?.type === \"variable_declaration\") continue;\r\n const owner = nearestFunctionInfo(assignment, functionByNode);\r\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\r\n const variableList = assignment.namedChildren.find((child) => child.type === \"variable_list\");\r\n const expressionList = assignment.namedChildren.find((child) => child.type === \"expression_list\");\r\n const names = variableList?.namedChildren.filter((child) => child.type === \"identifier\").map((child) => child.text) ?? [];\r\n const expression = expressionList?.namedChildren[0];\r\n if (!expression || expression.type !== \"function_call\") continue;\r\n const rawPath = expression.childForFieldName(\"name\")?.text ?? \"\";\r\n const path = resolvePath(rawPath, aliases, reactNamespaces, reactRobloxNamespaces);\r\n\r\n if (path === \"React.useState\" && names.length >= 2) {\r\n stableVariables.add(names[1]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\r\n } else if (path === \"React.useBinding\" && names.length >= 1) {\r\n stableVariables.add(names[0]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[0]);\r\n addScopedVariable(externalMutableVariablesByFunction, owner, names[0]);\r\n if (names.length >= 2) {\r\n stableVariables.add(names[1]);\r\n bindingSetters.add(names[1]);\r\n addScopedVariable(stableVariablesByFunction, owner, names[1]);\r\n }\r\n }\r\n }\r\n\r\n // Binding-like values are stable mutable handles. Custom React-Luau animation hooks\r\n // often return bindings without the analyzer knowing the hook implementation. Infer\r\n // them from Binding-only APIs instead of requiring them in dependency arrays.\r\n for (const call of allNodes) {\r\n if (call.type !== \"function_call\") continue;\r\n const rawPath = normalizeExpressionText(call.childForFieldName(\"name\")?.text ?? \"\");\r\n const match = rawPath.match(/^([A-Za-z_][A-Za-z0-9_]*):(?:getValue|map)$/);\r\n if (!match) continue;\r\n const owner = nearestFunctionInfo(call, functionByNode);\r\n if (!owner || (!owner.isComponent && !owner.isHook)) continue;\r\n stableVariables.add(match[1]);\r\n addScopedVariable(stableVariablesByFunction, owner, match[1]);\r\n addScopedVariable(externalMutableVariablesByFunction, owner, match[1]);\r\n }\r\n\r\n const componentLocals = new Map<number, Set<string>>();\r\n for (const info of functions) {\r\n if (!info.isComponent && !info.isHook) continue;\r\n const names = collectDirectLocals(info.body);\r\n for (const parameter of info.parameters) names.add(parameter);\r\n if (info.name?.includes(\":\")) names.add(\"self\");\r\n componentLocals.set(nodeKey(info.node), names);\r\n }\r\n\r\n return {\r\n allNodes,\r\n isReactFile,\r\n reactNamespaces,\r\n reactRobloxNamespaces,\r\n aliases,\r\n stateSetters,\r\n stateValues,\r\n stateBindings,\r\n refVariables,\r\n bindingSetters,\r\n stableVariables,\r\n refVariablesByFunction,\r\n stableVariablesByFunction,\r\n externalMutableVariablesByFunction,\r\n instanceVariablesByFunction,\r\n componentLocals,\r\n functions,\r\n functionByNode,\r\n };\r\n}\r\n",
51
55
  "interface SuppressionState {\r\n active: Set<string>;\r\n oneLine: Map<number, Set<string>>;\r\n}\r\n\r\nfunction normalizeRuleToken(token: string): string {\r\n const normalized = token.trim();\r\n if (!normalized || normalized === \"all\" || normalized === \"*\") return \"*\";\r\n return normalized.includes(\"/\") ? normalized : `react-luau/${normalized}`;\r\n}\r\n\r\nfunction parseRuleTokens(value: string): Set<string> {\r\n const withoutReason = value.split(\"--\", 1)[0] ?? \"\";\r\n const tokens = withoutReason\r\n .split(/[\\s,]+/)\r\n .map(normalizeRuleToken)\r\n .filter(Boolean);\r\n return new Set(tokens.length > 0 ? tokens : [\"*\"]);\r\n}\r\n\r\nfunction matchesRule(rules: Set<string> | undefined, ruleId: string): boolean {\r\n return Boolean(rules && (rules.has(\"*\") || rules.has(ruleId)));\r\n}\r\n\r\nexport function createInlineSuppressionChecker(source: string): (ruleId: string, line: number) => boolean {\r\n const state: SuppressionState = {\r\n active: new Set<string>(),\r\n oneLine: new Map<number, Set<string>>(),\r\n };\r\n const activeByLine = new Map<number, Set<string>>();\r\n const lines = source.split(/\\r?\\n/);\r\n const directive = /--\\s*react-luau-doctor-(disable|enable)(?:-(next-line|line))?\\b(.*)$/i;\r\n\r\n for (let index = 0; index < lines.length; index += 1) {\r\n const lineNumber = index + 1;\r\n activeByLine.set(lineNumber, new Set(state.active));\r\n\r\n const match = lines[index].match(directive);\r\n if (!match) continue;\r\n\r\n const action = match[1].toLowerCase();\r\n const placement = match[2]?.toLowerCase();\r\n const rules = parseRuleTokens(match[3] ?? \"\");\r\n\r\n if (placement === \"line\" || placement === \"next-line\") {\r\n if (action !== \"disable\") continue;\r\n const targetLine = placement === \"line\" ? lineNumber : lineNumber + 1;\r\n const existing = state.oneLine.get(targetLine) ?? new Set<string>();\r\n for (const rule of rules) existing.add(rule);\r\n state.oneLine.set(targetLine, existing);\r\n continue;\r\n }\r\n\r\n if (action === \"disable\") {\r\n for (const rule of rules) state.active.add(rule);\r\n } else if (rules.has(\"*\")) {\r\n state.active.clear();\r\n } else {\r\n for (const rule of rules) state.active.delete(rule);\r\n }\r\n }\r\n\r\n return (ruleId: string, line: number): boolean =>\r\n matchesRule(activeByLine.get(line), ruleId) || matchesRule(state.oneLine.get(line), ruleId);\r\n}\r\n",
@@ -60,7 +64,7 @@
60
64
  "import { presentationFor } from \"./presentation\";\r\nimport { compactFixPreview, previewLineMatches } from \"./fix-preview\";\r\nimport { rulesById } from \"./rules\";\r\nimport type { Diagnostic, Severity } from \"./types\";\r\n\r\nexport const WHY_ANSI = {\r\n reset: \"\\u001b[0m\",\r\n bold: \"\\u001b[1m\",\r\n dim: \"\\u001b[2m\",\r\n red: \"\\u001b[31m\",\r\n yellow: \"\\u001b[33m\",\r\n magenta: \"\\u001b[35m\",\r\n};\r\n\r\nfunction whyRgb(red: number, green: number, blue: number): string {\r\n return `\\u001b[38;2;${red};${green};${blue}m`;\r\n}\r\n\r\nfunction whyBgRgb(red: number, green: number, blue: number): string {\r\n return `\\u001b[48;2;${red};${green};${blue}m`;\r\n}\r\n\r\n// Close to VS Code's Dark+ semantic-token palette. Truecolor ANSI is supported by\r\n// Windows Terminal, modern PowerShell terminals, and the terminals most people use\r\n// to run the Doctor\r\nexport const WHY_THEME = {\r\n foreground: whyRgb(212, 212, 212),\r\n variable: whyRgb(156, 220, 254),\r\n function: whyRgb(220, 220, 170),\r\n string: whyRgb(206, 145, 120),\r\n number: whyRgb(181, 206, 168),\r\n comment: whyRgb(106, 153, 85),\r\n type: whyRgb(78, 201, 176),\r\n keyword: whyRgb(197, 134, 192),\r\n declarationKeyword: whyRgb(86, 156, 214),\r\n literal: whyRgb(86, 156, 214),\r\n property: whyRgb(156, 220, 254),\r\n section: whyRgb(78, 201, 176),\r\n category: whyRgb(79, 193, 255),\r\n gutter: whyRgb(96, 96, 96),\r\n activeGutter: whyRgb(244, 71, 71),\r\n addedBackground: whyBgRgb(36, 72, 48),\r\n removedBackground: whyBgRgb(82, 43, 47),\r\n addedLabelBackground: whyBgRgb(28, 83, 50),\r\n removedLabelBackground: whyBgRgb(103, 45, 50),\r\n};\r\n\r\nexport function whyPaint(enabled: boolean, value: string, ...codes: string[]): string {\r\n if (!enabled || codes.length === 0) return value;\r\n\r\n return `${codes.join(\"\")}${value}${WHY_ANSI.reset}`;\r\n}\r\n\r\nfunction whySeverityPaint(\r\n enabled: boolean,\r\n severity: Severity,\r\n value: string,\r\n): string {\r\n if (severity === \"error\")\r\n return whyPaint(enabled, value, WHY_ANSI.bold, WHY_ANSI.red);\r\n\r\n if (severity === \"warning\")\r\n return whyPaint(enabled, value, WHY_ANSI.bold, WHY_ANSI.yellow);\r\n\r\n return whyPaint(enabled, value, WHY_ANSI.bold, WHY_ANSI.magenta);\r\n}\r\n\r\nexport function whySectionTitle(enabled: boolean, value: string): string {\r\n return whyPaint(enabled, value, WHY_ANSI.bold, WHY_THEME.section);\r\n}\r\n\r\nconst LUAU_CONTROL_KEYWORDS = new Set([\r\n \"and\",\r\n \"break\",\r\n \"continue\",\r\n \"do\",\r\n \"else\",\r\n \"elseif\",\r\n \"end\",\r\n \"for\",\r\n \"if\",\r\n \"in\",\r\n \"not\",\r\n \"or\",\r\n \"repeat\",\r\n \"return\",\r\n \"then\",\r\n \"until\",\r\n \"while\",\r\n]);\r\n\r\nconst LUAU_DECLARATION_KEYWORDS = new Set([\r\n \"export\",\r\n \"function\",\r\n \"local\",\r\n \"type\",\r\n]);\r\n\r\nconst LUAU_LITERAL_KEYWORDS = new Set([\"false\", \"nil\", \"true\"]);\r\n\r\ntype WhyLuauTokenKind =\r\n \"whitespace\" | \"comment\" | \"string\" | \"number\" | \"identifier\" | \"operator\";\r\n\r\ninterface WhyLuauToken {\r\n kind: WhyLuauTokenKind;\r\n text: string;\r\n start: number;\r\n end: number;\r\n}\r\n\r\ninterface WhyCharacterRange {\r\n start: number;\r\n end: number;\r\n}\r\n\r\nfunction tokenizeWhyLuauLine(line: string): WhyLuauToken[] {\r\n const tokens: WhyLuauToken[] = [];\r\n let index = 0;\r\n\r\n const push = (kind: WhyLuauTokenKind, value: string, start: number): void => {\r\n tokens.push({ kind, text: value, start, end: start + value.length });\r\n };\r\n\r\n while (index < line.length) {\r\n const rest = line.slice(index);\r\n const ch = line[index];\r\n\r\n const whitespace = /^\\s+/.exec(rest);\r\n\r\n if (whitespace) {\r\n push(\"whitespace\", whitespace[0], index);\r\n index += whitespace[0].length;\r\n continue;\r\n }\r\n\r\n if (rest.startsWith(\"--\")) {\r\n push(\"comment\", rest, index);\r\n break;\r\n }\r\n\r\n if (ch === '\"' || ch === \"'\" || ch === \"`\") {\r\n let tokenEnd = index + 1;\r\n\r\n while (tokenEnd < line.length) {\r\n if (line.charCodeAt(tokenEnd) === 92) {\r\n tokenEnd += 2;\r\n continue;\r\n }\r\n\r\n if (line[tokenEnd] === ch) {\r\n tokenEnd += 1;\r\n break;\r\n }\r\n\r\n tokenEnd += 1;\r\n }\r\n\r\n push(\"string\", line.slice(index, tokenEnd), index);\r\n index = tokenEnd;\r\n continue;\r\n }\r\n\r\n if (rest.startsWith(\"[[\")) {\r\n const close = line.indexOf(\"]]\", index + 2);\r\n const tokenEnd = close >= 0 ? close + 2 : line.length;\r\n push(\"string\", line.slice(index, tokenEnd), index);\r\n index = tokenEnd;\r\n continue;\r\n }\r\n\r\n const number =\r\n /^(?:0[xX][0-9a-fA-F_]+|0[bB][01_]+|\\d[\\d_]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d[\\d_]*)?)/.exec(\r\n rest,\r\n );\r\n\r\n if (number) {\r\n push(\"number\", number[0], index);\r\n index += number[0].length;\r\n continue;\r\n }\r\n\r\n const identifier = /^[A-Za-z_][A-Za-z0-9_]*/.exec(rest);\r\n\r\n if (identifier) {\r\n push(\"identifier\", identifier[0], index);\r\n index += identifier[0].length;\r\n continue;\r\n }\r\n\r\n const operator =\r\n /^(?:\\.\\.\\.|\\.\\.|==|~=|<=|>=|::|->|\\+=|-=|\\*=|\\/=|%=|\\^=|[+\\-*\\/%^#=<>:.,;()[\\]{}])/.exec(\r\n rest,\r\n );\r\n\r\n const token = operator?.[0] ?? ch;\r\n push(\"operator\", token, index);\r\n index += token.length;\r\n }\r\n\r\n return tokens;\r\n}\r\n\r\nfunction previousWhyToken(\r\n tokens: WhyLuauToken[],\r\n index: number,\r\n): WhyLuauToken | undefined {\r\n for (let cursor = index - 1; cursor >= 0; cursor -= 1) {\r\n if (tokens[cursor].kind !== \"whitespace\") return tokens[cursor];\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction nextWhyToken(\r\n tokens: WhyLuauToken[],\r\n index: number,\r\n): WhyLuauToken | undefined {\r\n for (let cursor = index + 1; cursor < tokens.length; cursor += 1) {\r\n if (tokens[cursor].kind !== \"whitespace\") return tokens[cursor];\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction whyIdentifierCodes(tokens: WhyLuauToken[], index: number): string[] {\r\n const value = tokens[index].text;\r\n\r\n if (LUAU_CONTROL_KEYWORDS.has(value))\r\n return [WHY_ANSI.bold, WHY_THEME.keyword];\r\n\r\n if (LUAU_DECLARATION_KEYWORDS.has(value))\r\n return [WHY_ANSI.bold, WHY_THEME.declarationKeyword];\r\n\r\n if (LUAU_LITERAL_KEYWORDS.has(value))\r\n return [WHY_ANSI.bold, WHY_THEME.literal];\r\n\r\n const previous = previousWhyToken(tokens, index);\r\n const next = nextWhyToken(tokens, index);\r\n const previousText = previous?.text;\r\n const nextText = next?.text;\r\n\r\n if (previousText === \"function\" || nextText === \"(\")\r\n return [WHY_THEME.function];\r\n\r\n if ((previousText === \".\" || previousText === \":\") && nextText === \"(\")\r\n return [WHY_THEME.function];\r\n\r\n if (previousText === \"type\" || (previousText === \":\" && nextText !== \"(\"))\r\n return [WHY_THEME.type];\r\n\r\n if (previousText === \".\" || previousText === \":\") return [WHY_THEME.property];\r\n\r\n if (/^[A-Z]/.test(value) && (nextText === \".\" || nextText === \"<\"))\r\n return [WHY_THEME.type];\r\n\r\n if (nextText === \"=\" && previousText !== \"local\") return [WHY_THEME.property];\r\n\r\n return [WHY_THEME.variable];\r\n}\r\n\r\nfunction whyTokenCodes(tokens: WhyLuauToken[], index: number): string[] {\r\n const token = tokens[index];\r\n\r\n if (token.kind === \"comment\") return [WHY_THEME.comment];\r\n\r\n if (token.kind === \"string\") return [WHY_THEME.string];\r\n\r\n if (token.kind === \"number\") return [WHY_THEME.number];\r\n\r\n if (token.kind === \"identifier\") return whyIdentifierCodes(tokens, index);\r\n\r\n if (token.kind === \"operator\") return [WHY_THEME.foreground];\r\n\r\n return [];\r\n}\r\n\r\nfunction whyRangeContains(\r\n ranges: WhyCharacterRange[],\r\n position: number,\r\n): boolean {\r\n return ranges.some(\r\n (range) => position >= range.start && position < range.end,\r\n );\r\n}\r\n\r\nfunction highlightLuauLine(\r\n line: string,\r\n colorized: boolean,\r\n backgroundRanges: WhyCharacterRange[] = [],\r\n backgroundCode?: string,\r\n): string {\r\n if (!colorized || !line) return line;\r\n\r\n const tokens = tokenizeWhyLuauLine(line);\r\n\r\n return tokens\r\n .map((token, index) => {\r\n const foreground = whyTokenCodes(tokens, index);\r\n const cuts = new Set<number>([token.start, token.end]);\r\n\r\n for (const range of backgroundRanges) {\r\n if (range.end <= token.start || range.start >= token.end) continue;\r\n\r\n cuts.add(Math.max(token.start, range.start));\r\n cuts.add(Math.min(token.end, range.end));\r\n }\r\n\r\n const points = [...cuts].sort((a, b) => a - b);\r\n const segments: string[] = [];\r\n\r\n for (let point = 0; point < points.length - 1; point += 1) {\r\n const segmentStart = points[point];\r\n const segmentEnd = points[point + 1];\r\n const value = line.slice(segmentStart, segmentEnd);\r\n\r\n const changed =\r\n Boolean(backgroundCode) &&\r\n whyRangeContains(backgroundRanges, segmentStart);\r\n\r\n if (foreground.length === 0 && !changed) segments.push(value);\r\n else\r\n segments.push(\r\n whyPaint(\r\n true,\r\n value,\r\n ...foreground,\r\n ...(changed && backgroundCode ? [backgroundCode] : []),\r\n ),\r\n );\r\n }\r\n\r\n return segments.join(\"\");\r\n })\r\n .join(\"\");\r\n}\r\n\r\nfunction changedCharacterRanges(\r\n before: string,\r\n after: string,\r\n): { before: WhyCharacterRange[]; after: WhyCharacterRange[] } {\r\n if (before === after) return { before: [], after: [] };\r\n\r\n let prefix = 0;\r\n\r\n while (\r\n prefix < before.length &&\r\n prefix < after.length &&\r\n before[prefix] === after[prefix]\r\n )\r\n prefix += 1;\r\n\r\n let suffix = 0;\r\n\r\n while (\r\n suffix < before.length - prefix &&\r\n suffix < after.length - prefix &&\r\n before[before.length - 1 - suffix] === after[after.length - 1 - suffix]\r\n )\r\n suffix += 1;\r\n\r\n return {\r\n before:\r\n before.length - suffix > prefix\r\n ? [{ start: prefix, end: before.length - suffix }]\r\n : [],\r\n\r\n after:\r\n after.length - suffix > prefix\r\n ? [{ start: prefix, end: after.length - suffix }]\r\n : [],\r\n };\r\n}\r\n\r\ninterface WhyPreviewDiff {\r\n beforeRanges: WhyCharacterRange[][];\r\n afterRanges: WhyCharacterRange[][];\r\n}\r\n\r\nfunction whyPreviewDiff(\r\n beforeLines: string[],\r\n afterLines: string[],\r\n): WhyPreviewDiff {\r\n const matches = previewLineMatches(beforeLines, afterLines);\r\n\r\n const beforeRanges = beforeLines.map(() => [] as WhyCharacterRange[]);\r\n const afterRanges = afterLines.map(() => [] as WhyCharacterRange[]);\r\n\r\n const sentinels: Array<[number, number]> = [\r\n [-1, -1],\r\n ...matches,\r\n [beforeLines.length, afterLines.length],\r\n ];\r\n\r\n for (let matchIndex = 0; matchIndex < sentinels.length - 1; matchIndex += 1) {\r\n const [previousBefore, previousAfter] = sentinels[matchIndex];\r\n const [nextBefore, nextAfter] = sentinels[matchIndex + 1];\r\n const beforeStart = previousBefore + 1;\r\n const afterStart = previousAfter + 1;\r\n const beforeCount = nextBefore - beforeStart;\r\n const afterCount = nextAfter - afterStart;\r\n const paired = Math.min(beforeCount, afterCount);\r\n\r\n for (let offset = 0; offset < paired; offset += 1) {\r\n const left = beforeStart + offset;\r\n const right = afterStart + offset;\r\n\r\n const ranges = changedCharacterRanges(\r\n beforeLines[left],\r\n afterLines[right],\r\n );\r\n\r\n beforeRanges[left] = ranges.before;\r\n afterRanges[right] = ranges.after;\r\n }\r\n\r\n for (let offset = paired; offset < beforeCount; offset += 1) {\r\n const line = beforeStart + offset;\r\n\r\n beforeRanges[line] = [\r\n { start: 0, end: Math.max(1, beforeLines[line].length) },\r\n ];\r\n }\r\n\r\n for (let offset = paired; offset < afterCount; offset += 1) {\r\n const line = afterStart + offset;\r\n\r\n afterRanges[line] = [\r\n { start: 0, end: Math.max(1, afterLines[line].length) },\r\n ];\r\n }\r\n }\r\n\r\n return { beforeRanges, afterRanges };\r\n}\r\n\r\nfunction normalizeWhyPreviewLines(value: string): string[] {\r\n const lines = value.split(/\\r?\\n/).map((line) => expandWhyTabs(line));\r\n\r\n while (lines.length > 1 && lines[0].trim().length === 0) lines.shift();\r\n\r\n while (lines.length > 1 && lines.at(-1)?.trim().length === 0) lines.pop();\r\n\r\n if (lines.length <= 1) return lines;\r\n\r\n const indentation = (line: string): number =>\r\n line.match(/^ */)?.[0].length ?? 0;\r\n\r\n const nonBlank = lines\r\n .map((line, index) => ({ line, index }))\r\n .filter(({ line }) => line.trim().length > 0);\r\n\r\n if (nonBlank.length === 0) return lines;\r\n\r\n const firstIndent = indentation(nonBlank[0].line);\r\n\r\n if (firstIndent > 0) {\r\n const commonIndent = Math.min(\r\n ...nonBlank.map(({ line }) => indentation(line)),\r\n );\r\n\r\n return lines.map((line) =>\r\n line.trim().length === 0\r\n ? \"\"\r\n : line.slice(Math.min(commonIndent, indentation(line))),\r\n );\r\n }\r\n\r\n // Syntax-node text begins at the expression itself, so the first line has no\r\n // file indentation while continuation lines still include the source file's\r\n // tabs/spaces. Remove the continuation baseline, but preserve indentation\r\n // relative to that baseline for nested code inside the expression\r\n const continuation = nonBlank.filter(\r\n ({ index }) => index > nonBlank[0].index,\r\n );\r\n\r\n if (continuation.length === 0) return lines;\r\n\r\n const continuationBaseline = Math.min(\r\n ...continuation.map(({ line }) => indentation(line)),\r\n );\r\n\r\n if (continuationBaseline <= 0) return lines;\r\n\r\n return lines.map((line, index) => {\r\n if (index <= nonBlank[0].index || line.trim().length === 0) return line;\r\n\r\n return line.slice(Math.min(continuationBaseline, indentation(line)));\r\n });\r\n}\r\n\r\nexport function renderWhyFixPreview(\r\n preview: { before: string; after: string; note?: string },\r\n colorized: boolean,\r\n textWidth: number,\r\n): string[] {\r\n preview = compactFixPreview({\r\n ...preview,\r\n before: preview.before.replace(/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/g, \"?\"),\r\n after: preview.after.replace(/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/g, \"?\"),\r\n });\r\n\r\n const beforeLines = normalizeWhyPreviewLines(preview.before);\r\n const afterLines = normalizeWhyPreviewLines(preview.after);\r\n const diff = whyPreviewDiff(beforeLines, afterLines);\r\n\r\n const currentLabel = colorized\r\n ? whyPaint(\r\n true,\r\n \" CURRENT \",\r\n WHY_ANSI.bold,\r\n WHY_THEME.foreground,\r\n WHY_THEME.removedLabelBackground,\r\n )\r\n : \"CURRENT\";\r\n\r\n const suggestedLabel = colorized\r\n ? whyPaint(\r\n true,\r\n \" SUGGESTED \",\r\n WHY_ANSI.bold,\r\n WHY_THEME.foreground,\r\n WHY_THEME.addedLabelBackground,\r\n )\r\n : \"SUGGESTED\";\r\n\r\n const lines: string[] = [currentLabel];\r\n\r\n beforeLines.forEach((line, index) => {\r\n lines.push(\r\n ` ${highlightLuauLine(line, colorized, diff.beforeRanges[index], WHY_THEME.removedBackground)}`,\r\n );\r\n });\r\n\r\n lines.push(\"\", suggestedLabel);\r\n\r\n afterLines.forEach((line, index) => {\r\n lines.push(\r\n ` ${highlightLuauLine(line, colorized, diff.afterRanges[index], WHY_THEME.addedBackground)}`,\r\n );\r\n });\r\n\r\n if (preview.note) {\r\n lines.push(\r\n \"\",\r\n ...wrapWhyWords(preview.note, textWidth).map((line) =>\r\n whyPaint(colorized, line, WHY_ANSI.dim),\r\n ),\r\n );\r\n }\r\n\r\n return lines;\r\n}\r\n\r\nexport function wrapWhyWords(value: string, width: number): string[] {\r\n const safeWidth = Math.max(32, width);\r\n const paragraphs = value.split(/\\r?\\n/);\r\n const lines: string[] = [];\r\n\r\n for (\r\n let paragraphIndex = 0;\r\n paragraphIndex < paragraphs.length;\r\n paragraphIndex += 1\r\n ) {\r\n const paragraph = paragraphs[paragraphIndex].trim().replace(/\\s+/g, \" \");\r\n\r\n if (!paragraph) {\r\n lines.push(\"\");\r\n continue;\r\n }\r\n\r\n let line = \"\";\r\n\r\n for (const word of paragraph.split(\" \")) {\r\n if (!line) {\r\n line = word;\r\n continue;\r\n }\r\n\r\n if (line.length + 1 + word.length <= safeWidth) {\r\n line += ` ${word}`;\r\n continue;\r\n }\r\n\r\n lines.push(line);\r\n line = word;\r\n }\r\n\r\n if (line) lines.push(line);\r\n\r\n if (\r\n paragraphIndex < paragraphs.length - 1 &&\r\n paragraphs[paragraphIndex + 1].trim()\r\n )\r\n lines.push(\"\");\r\n }\r\n\r\n return lines.length > 0 ? lines : [\"\"];\r\n}\r\n\r\nfunction whyDiagnosticRanges(diagnostic: Diagnostic): Diagnostic[\"location\"][] {\r\n return diagnostic.highlights && diagnostic.highlights.length > 0\r\n ? diagnostic.highlights\r\n : [diagnostic.location];\r\n}\r\n\r\nfunction expandWhyTabs(value: string, tabWidth = 4): string {\r\n let result = \"\";\r\n let column = 0;\r\n\r\n for (const character of value) {\r\n if (character === \"\\t\") {\r\n const spaces = tabWidth - (column % tabWidth);\r\n result += \" \".repeat(spaces);\r\n column += spaces;\r\n } else {\r\n result += character;\r\n column += 1;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction whyVisualColumn(line: string, column: number): number {\r\n return expandWhyTabs(line.slice(0, Math.max(0, column - 1))).length + 1;\r\n}\r\n\r\nfunction whyFrameIntervals(\r\n ranges: Diagnostic[\"location\"][],\r\n sourceLength: number,\r\n): Array<{ start: number; end: number }> {\r\n const intervals = ranges\r\n .map((range) => ({\r\n start: Math.max(1, range.line - 2),\r\n end: Math.min(sourceLength, range.endLine + 2),\r\n }))\r\n .sort((a, b) => a.start - b.start || a.end - b.end);\r\n\r\n const merged: Array<{ start: number; end: number }> = [];\r\n\r\n for (const interval of intervals) {\r\n const previous = merged.at(-1);\r\n\r\n if (previous && interval.start <= previous.end + 1)\r\n previous.end = Math.max(previous.end, interval.end);\r\n else merged.push({ ...interval });\r\n }\r\n\r\n return merged;\r\n}\r\n\r\nfunction whyCaretForLine(\r\n sourceLine: string,\r\n line: number,\r\n ranges: Diagnostic[\"location\"][],\r\n): string | null {\r\n const expanded = expandWhyTabs(sourceLine);\r\n\r\n const marks = Array.from(\r\n { length: Math.max(1, expanded.length + 1) },\r\n () => false,\r\n );\r\n\r\n let hasMark = false;\r\n\r\n for (const range of ranges) {\r\n if (line < range.line || line > range.endLine) continue;\r\n\r\n const rawStart = line === range.line ? range.column : 1;\r\n\r\n const rawEnd =\r\n line === range.endLine ? range.endColumn : sourceLine.length + 1;\r\n\r\n const start = Math.max(1, whyVisualColumn(sourceLine, rawStart));\r\n const end = Math.max(start + 1, whyVisualColumn(sourceLine, rawEnd));\r\n\r\n for (\r\n let column = start - 1;\r\n column < Math.min(marks.length, end - 1);\r\n column += 1\r\n ) {\r\n marks[column] = true;\r\n hasMark = true;\r\n }\r\n }\r\n\r\n if (!hasMark) return null;\r\n\r\n let value = marks\r\n .map((marked) => (marked ? \"^\" : \" \"))\r\n .join(\"\")\r\n .replace(/\\s+$/, \"\");\r\n\r\n if (!value) value = \"^\";\r\n\r\n return value;\r\n}\r\n\r\nfunction renderWhyCodeFrame(\r\n sourceText: string,\r\n diagnostic: Diagnostic,\r\n colorized: boolean,\r\n): string {\r\n const source = sourceText.replace(/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/g, \"?\").split(/\\r?\\n/);\r\n const ranges = whyDiagnosticRanges(diagnostic);\r\n const intervals = whyFrameIntervals(ranges, source.length);\r\n\r\n const width = String(\r\n Math.max(...intervals.map((interval) => interval.end), 1),\r\n ).length;\r\n\r\n const lines: string[] = [];\r\n\r\n intervals.forEach((interval, intervalIndex) => {\r\n if (intervalIndex > 0) {\r\n lines.push(\r\n `${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)}`,\r\n );\r\n }\r\n\r\n for (let line = interval.start; line <= interval.end; line += 1) {\r\n const sourceLine = source[line - 1] ?? \"\";\r\n const caretText = whyCaretForLine(sourceLine, line, ranges);\r\n const active = caretText !== null;\r\n\r\n const marker = active\r\n ? whyPaint(colorized, \">\", WHY_ANSI.bold, WHY_ANSI.red)\r\n : whyPaint(colorized, \"|\", WHY_ANSI.dim, WHY_THEME.gutter);\r\n\r\n const number = whyPaint(\r\n colorized,\r\n String(line).padStart(width),\r\n active ? WHY_ANSI.bold : WHY_ANSI.dim,\r\n active ? WHY_THEME.activeGutter : WHY_THEME.gutter,\r\n );\r\n\r\n const code = highlightLuauLine(expandWhyTabs(sourceLine), colorized);\r\n\r\n lines.push(\r\n `${marker} ${number} ${whyPaint(colorized, \"|\", WHY_ANSI.dim, WHY_THEME.gutter)} ${code}`,\r\n );\r\n\r\n if (caretText) {\r\n const caret = whyPaint(\r\n colorized,\r\n caretText,\r\n WHY_ANSI.bold,\r\n WHY_ANSI.red,\r\n );\r\n\r\n lines.push(\r\n ` ${\" \".repeat(width)} ${whyPaint(colorized, \"|\", WHY_ANSI.dim, WHY_THEME.gutter)} ${caret}`,\r\n );\r\n }\r\n }\r\n });\r\n\r\n return lines.join(\"\\n\");\r\n}\r\n\r\nfunction whySeverityMeaning(severity: Severity): string {\r\n if (severity === \"error\")\r\n return \"This can cause incorrect behavior or violate React's rules and should normally be fixed\";\r\n\r\n if (severity === \"warning\")\r\n return \"This pattern is very likely to be a real issue in the code shown and is normally worth fixing\";\r\n\r\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\";\r\n}\r\n\r\nexport function renderWhyDiagnostic(\r\n sourceText: string,\r\n diagnostic: Diagnostic,\r\n colorized: boolean,\r\n textWidth = 118,\r\n): string {\r\n const rule = rulesById.get(diagnostic.rule);\r\n if (!rule) throw new Error(`Unknown rule: ${diagnostic.rule}`);\r\n const presentation = presentationFor(diagnostic);\r\n\r\n const lines: string[] = [\r\n whyPaint(colorized, diagnostic.rule, WHY_ANSI.bold, WHY_ANSI.magenta),\r\n whyPaint(\r\n colorized,\r\n `${diagnostic.file}:${diagnostic.location.line}:${diagnostic.location.column}`,\r\n WHY_ANSI.bold,\r\n ),\r\n [\r\n `${whyPaint(colorized, \"Severity\", WHY_ANSI.bold)}: ${whySeverityPaint(colorized, diagnostic.severity, diagnostic.severity)}`,\r\n `${whyPaint(colorized, \"Category\", WHY_ANSI.bold)}: ${whyPaint(colorized, diagnostic.category, WHY_ANSI.bold, WHY_THEME.category)}`,\r\n ].join(whyPaint(colorized, \" | \", WHY_ANSI.dim)),\r\n \"\",\r\n renderWhyCodeFrame(sourceText, diagnostic, colorized),\r\n \"\",\r\n whySectionTitle(colorized, \"Why this fired\"),\r\n ...wrapWhyWords(diagnostic.message, textWidth),\r\n ];\r\n\r\n if (\r\n presentation.explanation !== diagnostic.message &&\r\n presentation.explanation !== rule.description\r\n ) {\r\n lines.push(\"\", ...wrapWhyWords(presentation.explanation, textWidth));\r\n }\r\n\r\n lines.push(\r\n \"\",\r\n whySectionTitle(colorized, \"What the rule checks\"),\r\n ...wrapWhyWords(rule.description, textWidth),\r\n \"\",\r\n whySectionTitle(colorized, \"Confidence\"),\r\n ...wrapWhyWords(whySeverityMeaning(diagnostic.severity), textWidth),\r\n );\r\n\r\n if (presentation.help) {\r\n lines.push(\r\n \"\",\r\n whySectionTitle(colorized, \"How to fix\"),\r\n ...wrapWhyWords(presentation.help, textWidth),\r\n );\r\n }\r\n\r\n const fixPreview = presentation.example;\r\n\r\n if (fixPreview) {\r\n const previewTitle =\r\n fixPreview.kind === \"exact\" ? \"Suggested change\" : \"Example pattern\";\r\n\r\n lines.push(\r\n \"\",\r\n whySectionTitle(colorized, previewTitle),\r\n ...renderWhyFixPreview(fixPreview, colorized, textWidth),\r\n );\r\n }\r\n\r\n if (presentation.caveat) {\r\n lines.push(\r\n \"\",\r\n whySectionTitle(\r\n colorized,\r\n \"When the current approach may be intentional\",\r\n ),\r\n ...wrapWhyWords(presentation.caveat, textWidth),\r\n );\r\n }\r\n\r\n return `${lines.join(\"\\n\")}\\n`;\r\n}\r\n",
61
65
  "import type { ScanProgress } from \"./types\";\r\n\r\nconst ANSI = {\r\n reset: \"\\u001b[0m\",\r\n dim: \"\\u001b[2m\",\r\n magenta: \"\\u001b[35m\",\r\n green: \"\\u001b[32m\",\r\n};\r\n\r\nfunction paint(value: string, code: string): string {\r\n return `${code}${value}${ANSI.reset}`;\r\n}\r\n\r\nfunction visibleLength(value: string): number {\r\n return value.replace(/\\u001b\\[[0-9;]*m/g, \"\").length;\r\n}\r\n\r\nfunction truncateMiddle(value: string, width: number): string {\r\n if (width <= 0) return \"\";\r\n if (value.length <= width) return value;\r\n if (width <= 3) return value.slice(0, width);\r\n const left = Math.ceil((width - 1) / 2);\r\n const right = Math.floor((width - 1) / 2);\r\n return `${value.slice(0, left)}…${value.slice(value.length - right)}`;\r\n}\r\n\r\nexport function formatScanProgress(progress: ScanProgress, terminalWidth = 120, colorized = false): string {\r\n const total = Math.max(0, progress.total);\r\n const current = Math.max(0, Math.min(progress.current, total || progress.current));\r\n const ratio = total === 0 ? 1 : current / total;\r\n const percent = Math.round(ratio * 100);\r\n const counter = `${current}/${total}`;\r\n const prefix = `${progress.label ?? `Scanning${progress.phase ? ` ${progress.phase}` : \"\"}`} `;\r\n const suffix = `${percent.toString().padStart(3)}% ${counter}`;\r\n const fileBudget = Math.max(0, terminalWidth - prefix.length - suffix.length - 38);\r\n const file = progress.file && fileBudget >= 8 ? ` ${truncateMiddle(progress.file, fileBudget)}` : \"\";\r\n const barWidth = Math.max(12, Math.min(28, terminalWidth - prefix.length - suffix.length - file.length - 8));\r\n const filled = Math.max(0, Math.min(barWidth, Math.round(ratio * barWidth)));\r\n const active = \"█\".repeat(filled);\r\n const remaining = \"░\".repeat(barWidth - filled);\r\n const coloredActive = active ? paint(active, progress.partial ? ANSI.magenta : current >= total ? ANSI.green : ANSI.magenta) : \"\";\r\n const coloredRemaining = remaining ? paint(remaining, ANSI.dim) : \"\";\r\n const bar = colorized ? `${coloredActive}${coloredRemaining}` : `${active}${remaining}`;\r\n const line = `${prefix}[${bar}] ${suffix}${file}`;\r\n return visibleLength(line) <= terminalWidth ? line : `${prefix}[${bar}] ${suffix}`;\r\n}\r\n\r\ninterface ProgressStream {\r\n isTTY?: boolean;\r\n columns?: number;\r\n write(value: string): unknown;\r\n}\r\n\r\nexport interface ProgressRenderer {\r\n update(progress: ScanProgress): void;\r\n clear(): void;\r\n}\r\n\r\nexport function createProgressRenderer(options: {\r\n stream?: ProgressStream;\r\n enabled?: boolean;\r\n colorized?: boolean;\r\n throttleMs?: number;\r\n} = {}): ProgressRenderer {\r\n const stream = options.stream ?? process.stdout;\r\n const enabled = options.enabled ?? Boolean(stream.isTTY && !process.env.CI);\r\n const colorized = options.colorized ?? false;\r\n const throttleMs = options.throttleMs ?? 40;\r\n let lastWriteAt = 0;\r\n let lastProgress: ScanProgress | null = null;\r\n let visible = false;\r\n\r\n function render(progress: ScanProgress, force = false): void {\r\n if (!enabled) return;\r\n lastProgress = progress;\r\n const now = performance.now();\r\n if (!force && progress.current < progress.total && now - lastWriteAt < throttleMs) return;\r\n lastWriteAt = now;\r\n const line = formatScanProgress(progress, stream.columns || 120, colorized);\r\n stream.write(`\\r\\u001b[2K${line}`);\r\n visible = true;\r\n }\r\n\r\n return {\r\n update(progress) {\r\n const phaseChanged = lastProgress?.phase !== progress.phase || lastProgress?.label !== progress.label;\r\n render(progress, phaseChanged || progress.current >= progress.total || Boolean(progress.partial));\r\n },\r\n clear() {\r\n if (!enabled || !visible) return;\r\n stream.write(\"\\r\\u001b[2K\");\r\n visible = false;\r\n },\r\n };\r\n}\r\n"
62
66
  ],
63
- "mappings": "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",
64
- "debugId": "9D947B614FF21B3A64756E2164756E21",
67
+ "mappings": "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",
68
+ "debugId": "72F30B6744C80DF864756E2164756E21",
65
69
  "names": []
66
70
  }