@kernlang/review 3.2.3 → 3.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist/cache.js +140 -3
  2. package/dist/cache.js.map +1 -1
  3. package/dist/call-graph.d.ts +4 -1
  4. package/dist/call-graph.js +290 -25
  5. package/dist/call-graph.js.map +1 -1
  6. package/dist/concept-rules/contract-drift.d.ts +21 -0
  7. package/dist/concept-rules/contract-drift.js +66 -0
  8. package/dist/concept-rules/contract-drift.js.map +1 -0
  9. package/dist/concept-rules/cross-stack-utils.d.ts +50 -0
  10. package/dist/concept-rules/cross-stack-utils.js +98 -0
  11. package/dist/concept-rules/cross-stack-utils.js.map +1 -0
  12. package/dist/concept-rules/index.js +12 -1
  13. package/dist/concept-rules/index.js.map +1 -1
  14. package/dist/concept-rules/tainted-across-wire.d.ts +33 -0
  15. package/dist/concept-rules/tainted-across-wire.js +98 -0
  16. package/dist/concept-rules/tainted-across-wire.js.map +1 -0
  17. package/dist/concept-rules/untyped-api-response.d.ts +30 -0
  18. package/dist/concept-rules/untyped-api-response.js +71 -0
  19. package/dist/concept-rules/untyped-api-response.js.map +1 -0
  20. package/dist/external-tools.d.ts +36 -4
  21. package/dist/external-tools.js +79 -12
  22. package/dist/external-tools.js.map +1 -1
  23. package/dist/graph.js +149 -39
  24. package/dist/graph.js.map +1 -1
  25. package/dist/index.d.ts +29 -4
  26. package/dist/index.js +329 -47
  27. package/dist/index.js.map +1 -1
  28. package/dist/inferrer.d.ts +5 -0
  29. package/dist/inferrer.js +1 -1
  30. package/dist/inferrer.js.map +1 -1
  31. package/dist/llm-bridge.d.ts +26 -1
  32. package/dist/llm-bridge.js +42 -6
  33. package/dist/llm-bridge.js.map +1 -1
  34. package/dist/llm-review.js +29 -11
  35. package/dist/llm-review.js.map +1 -1
  36. package/dist/mappers/ts-concepts.js +278 -7
  37. package/dist/mappers/ts-concepts.js.map +1 -1
  38. package/dist/public-api.d.ts +73 -0
  39. package/dist/public-api.js +351 -0
  40. package/dist/public-api.js.map +1 -0
  41. package/dist/reporter.d.ts +5 -0
  42. package/dist/reporter.js +119 -84
  43. package/dist/reporter.js.map +1 -1
  44. package/dist/review-health.d.ts +38 -0
  45. package/dist/review-health.js +60 -0
  46. package/dist/review-health.js.map +1 -0
  47. package/dist/rules/async.js +4 -16
  48. package/dist/rules/async.js.map +1 -1
  49. package/dist/rules/base.js +112 -87
  50. package/dist/rules/base.js.map +1 -1
  51. package/dist/rules/confidence.d.ts +2 -2
  52. package/dist/rules/confidence.js +32 -15
  53. package/dist/rules/confidence.js.map +1 -1
  54. package/dist/rules/dead-code.d.ts +2 -1
  55. package/dist/rules/dead-code.js +49 -3
  56. package/dist/rules/dead-code.js.map +1 -1
  57. package/dist/rules/index.js +131 -0
  58. package/dist/rules/index.js.map +1 -1
  59. package/dist/rules/kern-source-cross-file.d.ts +2 -0
  60. package/dist/rules/kern-source-cross-file.js +102 -0
  61. package/dist/rules/kern-source-cross-file.js.map +1 -0
  62. package/dist/rules/kern-source.js +86 -9
  63. package/dist/rules/kern-source.js.map +1 -1
  64. package/dist/rules/nextjs-app-router.js +936 -31
  65. package/dist/rules/nextjs-app-router.js.map +1 -1
  66. package/dist/rules/nextjs.js +193 -10
  67. package/dist/rules/nextjs.js.map +1 -1
  68. package/dist/rules/react-composition.js +442 -61
  69. package/dist/rules/react-composition.js.map +1 -1
  70. package/dist/rules/react-hooks.js +51 -2
  71. package/dist/rules/react-hooks.js.map +1 -1
  72. package/dist/rules/react.js +265 -49
  73. package/dist/rules/react.js.map +1 -1
  74. package/dist/rules/utils.d.ts +37 -2
  75. package/dist/rules/utils.js +113 -0
  76. package/dist/rules/utils.js.map +1 -1
  77. package/dist/semantic-diff.js +1 -1
  78. package/dist/semantic-diff.js.map +1 -1
  79. package/dist/taint-ast.js +228 -4
  80. package/dist/taint-ast.js.map +1 -1
  81. package/dist/taint-crossfile.d.ts +30 -2
  82. package/dist/taint-crossfile.js +280 -59
  83. package/dist/taint-crossfile.js.map +1 -1
  84. package/dist/taint-types.d.ts +2 -1
  85. package/dist/taint-types.js +32 -2
  86. package/dist/taint-types.js.map +1 -1
  87. package/dist/taint.d.ts +1 -1
  88. package/dist/taint.js +1 -1
  89. package/dist/taint.js.map +1 -1
  90. package/dist/types.d.ts +80 -0
  91. package/dist/types.js.map +1 -1
  92. package/package.json +3 -3
@@ -6,7 +6,9 @@
6
6
  * element identity across parent renders and lets React skip reconciliation
7
7
  * of unchanged subtrees.
8
8
  */
9
- import { Node, SyntaxKind } from 'ts-morph';
9
+ import { existsSync, readFileSync } from 'fs';
10
+ import { dirname, resolve } from 'path';
11
+ import { Node, Project, SyntaxKind } from 'ts-morph';
10
12
  import { finding, nodeSpan } from './utils.js';
11
13
  /** Is this node a React component function? (Capitalized name + returns JSX) */
12
14
  function isComponentFunction(node) {
@@ -35,20 +37,30 @@ function isComponentFunction(node) {
35
37
  return { name, isComponent: hasJsx };
36
38
  }
37
39
  /** Extract destructured prop names from the first parameter of a component function. */
38
- function getDestructuredPropNames(fn) {
40
+ function getDestructuredPropBindings(fn) {
39
41
  const params = fn.getParameters();
40
42
  if (params.length === 0)
41
43
  return undefined;
42
44
  const nameNode = params[0].getNameNode();
43
45
  if (!Node.isObjectBindingPattern(nameNode))
44
46
  return undefined;
45
- const names = [];
47
+ const bindings = [];
46
48
  for (const el of nameNode.getElements()) {
47
49
  // Use the property name if aliased, otherwise the binding name
48
50
  const propName = el.getPropertyNameNode()?.getText() ?? el.getNameNode().getText();
49
- names.push(propName);
51
+ const localName = el.getNameNode().getText();
52
+ bindings.push({ propName, localName });
50
53
  }
51
- return names;
54
+ return bindings;
55
+ }
56
+ function getPropsParamName(fn) {
57
+ const params = fn.getParameters();
58
+ if (params.length === 0)
59
+ return undefined;
60
+ const nameNode = params[0].getNameNode();
61
+ if (Node.isIdentifier(nameNode))
62
+ return nameNode.getText();
63
+ return undefined;
52
64
  }
53
65
  function iterComponentFunctions(ctx) {
54
66
  const results = [];
@@ -76,8 +88,8 @@ function iterComponentFunctions(ctx) {
76
88
  function childrenNotUsed(ctx) {
77
89
  const findings = [];
78
90
  for (const fn of iterComponentFunctions(ctx)) {
79
- const propNames = getDestructuredPropNames(fn);
80
- if (!propNames || !propNames.includes('children'))
91
+ const propBindings = getDestructuredPropBindings(fn);
92
+ if (!propBindings?.some((p) => p.propName === 'children'))
81
93
  continue;
82
94
  const body = fn.getBody();
83
95
  if (!body)
@@ -165,73 +177,435 @@ function getSingleReturnedJsx(fn) {
165
177
  }
166
178
  return undefined;
167
179
  }
168
- function propDrillPassthrough(ctx) {
169
- const findings = [];
170
- for (const fn of iterComponentFunctions(ctx)) {
171
- const propNames = getDestructuredPropNames(fn);
172
- if (!propNames || propNames.length < 3)
180
+ function analyzePassthroughComponent(fn) {
181
+ const propBindings = getDestructuredPropBindings(fn) ?? [];
182
+ const propsParamName = getPropsParamName(fn);
183
+ if (propBindings.length === 0 && !propsParamName)
184
+ return undefined;
185
+ const root = getSingleReturnedJsx(fn);
186
+ if (!root)
187
+ return undefined;
188
+ const tag = root.getTagNameNode().getText();
189
+ if (!/^[A-Z]/.test(tag))
190
+ return undefined;
191
+ const bindingByLocal = new Map(propBindings.map((b) => [b.localName, b]));
192
+ const passedToChild = new Map();
193
+ for (const attr of root.getAttributes()) {
194
+ if (!Node.isJsxAttribute(attr))
173
195
  continue;
174
- const root = getSingleReturnedJsx(fn);
175
- if (!root)
196
+ const init = attr.getInitializer();
197
+ if (!init)
176
198
  continue;
177
- // The root element must be a custom component (capitalized tag) to be a meaningful passthrough.
178
- const tag = root.getTagNameNode().getText();
179
- if (!/^[A-Z]/.test(tag))
199
+ if (!Node.isJsxExpression(init))
180
200
  continue;
181
- // Collect prop names passed as shorthand attributes to the root child.
182
- // Only count attributes where the passed identifier is actually one of
183
- // THIS component's destructured props — local variables with matching
184
- // names (e.g. `title={title}` where `title` is a local const) are not
185
- // drilling.
186
- const propSet = new Set(propNames);
187
- const passedToChild = new Set();
188
- const passedWithShorthand = new Set();
189
- for (const attr of root.getAttributes()) {
190
- if (!Node.isJsxAttribute(attr))
191
- continue;
192
- const attrName = attr.getNameNode().getText();
193
- const init = attr.getInitializer();
201
+ const expr = init.getExpression();
202
+ if (!expr)
203
+ continue;
204
+ if (Node.isIdentifier(expr)) {
205
+ const binding = bindingByLocal.get(expr.getText());
206
+ if (binding) {
207
+ passedToChild.set(binding.propName, { attrExpr: expr, localName: binding.localName });
208
+ }
209
+ continue;
210
+ }
211
+ if (propsParamName && Node.isPropertyAccessExpression(expr)) {
212
+ const obj = expr.getExpression();
213
+ if (Node.isIdentifier(obj) && obj.getText() === propsParamName) {
214
+ passedToChild.set(expr.getName(), { attrExpr: expr });
215
+ }
216
+ }
217
+ }
218
+ if (passedToChild.size < 2)
219
+ return undefined;
220
+ const body = fn.getBody();
221
+ if (!body)
222
+ return undefined;
223
+ const consumedProps = new Set();
224
+ for (const [propName, { attrExpr, localName }] of passedToChild) {
225
+ if (propName === 'children')
226
+ continue;
227
+ if (localName) {
228
+ for (const id of body.getDescendantsOfKind(SyntaxKind.Identifier)) {
229
+ if (id.getText() !== localName)
230
+ continue;
231
+ const parent = id.getParent();
232
+ if (parent && Node.isBindingElement(parent))
233
+ continue;
234
+ if (parent && Node.isJsxAttribute(parent) && parent.getNameNode() === id)
235
+ continue;
236
+ if (id === attrExpr)
237
+ continue;
238
+ consumedProps.add(propName);
239
+ break;
240
+ }
241
+ }
242
+ else if (propsParamName) {
243
+ for (const access of body.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression)) {
244
+ if (access === attrExpr)
245
+ continue;
246
+ const obj = access.getExpression();
247
+ if (Node.isIdentifier(obj) && obj.getText() === propsParamName && access.getName() === propName) {
248
+ consumedProps.add(propName);
249
+ break;
250
+ }
251
+ }
252
+ }
253
+ }
254
+ const passthroughProps = [...passedToChild.keys()].filter((p) => p !== 'children' && !consumedProps.has(p));
255
+ if (passthroughProps.length < 2)
256
+ return undefined;
257
+ const info = isComponentFunction(fn);
258
+ return {
259
+ componentName: info.name,
260
+ childTag: tag,
261
+ passthroughProps,
262
+ };
263
+ }
264
+ function findComponentFunctionByName(sourceFile, componentName) {
265
+ for (const fn of sourceFile.getFunctions()) {
266
+ const info = isComponentFunction(fn);
267
+ if (info.isComponent && info.name === componentName)
268
+ return fn;
269
+ }
270
+ for (const stmt of sourceFile.getVariableStatements()) {
271
+ for (const decl of stmt.getDeclarations()) {
272
+ const init = decl.getInitializer();
194
273
  if (!init)
195
274
  continue;
196
- if (!Node.isJsxExpression(init))
275
+ if (!Node.isArrowFunction(init) && !Node.isFunctionExpression(init))
197
276
  continue;
198
- const expr = init.getExpression();
277
+ const info = isComponentFunction(init);
278
+ if (info.isComponent && info.name === componentName)
279
+ return init;
280
+ }
281
+ }
282
+ return undefined;
283
+ }
284
+ function isMemoCall(expr) {
285
+ return Node.isCallExpression(expr) && ['memo', 'React.memo'].includes(expr.getExpression().getText());
286
+ }
287
+ function findVariableDeclarationByName(sourceFile, variableName) {
288
+ for (const stmt of sourceFile.getVariableStatements()) {
289
+ for (const decl of stmt.getDeclarations()) {
290
+ if (decl.getName() === variableName)
291
+ return decl;
292
+ }
293
+ }
294
+ return undefined;
295
+ }
296
+ function findImportBinding(ctx, localName) {
297
+ for (const decl of ctx.sourceFile.getImportDeclarations()) {
298
+ const defaultImport = decl.getDefaultImport();
299
+ if (defaultImport?.getText() === localName) {
300
+ return { importDecl: decl, importedName: 'default', isDefault: true };
301
+ }
302
+ for (const named of decl.getNamedImports()) {
303
+ const boundLocal = named.getAliasNode()?.getText() ?? named.getNameNode().getText();
304
+ if (boundLocal === localName) {
305
+ return { importDecl: decl, importedName: named.getNameNode().getText(), isDefault: false };
306
+ }
307
+ }
308
+ }
309
+ return undefined;
310
+ }
311
+ function findDefaultExportedComponentFunction(sourceFile) {
312
+ for (const fn of sourceFile.getFunctions()) {
313
+ const info = isComponentFunction(fn);
314
+ if (info.isComponent && fn.isDefaultExport())
315
+ return fn;
316
+ }
317
+ for (const assign of sourceFile.getExportAssignments()) {
318
+ const expr = assign.getExpression();
319
+ if (!expr)
320
+ continue;
321
+ if (Node.isIdentifier(expr)) {
322
+ const resolved = findComponentFunctionByName(sourceFile, expr.getText());
323
+ if (resolved)
324
+ return resolved;
325
+ }
326
+ if (isMemoCall(expr)) {
327
+ const firstArg = expr.getArguments()[0];
328
+ if (firstArg && (Node.isArrowFunction(firstArg) || Node.isFunctionExpression(firstArg))) {
329
+ const info = isComponentFunction(firstArg);
330
+ if (info.isComponent)
331
+ return firstArg;
332
+ }
333
+ }
334
+ }
335
+ return undefined;
336
+ }
337
+ function findImportedComponentFunction(sourceFile, binding) {
338
+ return binding.isDefault
339
+ ? findDefaultExportedComponentFunction(sourceFile)
340
+ : findComponentFunctionByName(sourceFile, binding.importedName);
341
+ }
342
+ function isMemoizedExport(sourceFile, binding) {
343
+ if (binding.isDefault) {
344
+ for (const assign of sourceFile.getExportAssignments()) {
345
+ const expr = assign.getExpression();
199
346
  if (!expr)
200
347
  continue;
201
- if (Node.isIdentifier(expr) && expr.getText() === attrName && propSet.has(attrName)) {
202
- // Classic shorthand of a destructured prop: <Child user={user} theme={theme} />
203
- passedToChild.add(attrName);
204
- passedWithShorthand.add(attrName);
348
+ if (isMemoCall(expr))
349
+ return true;
350
+ if (Node.isIdentifier(expr)) {
351
+ const decl = findVariableDeclarationByName(sourceFile, expr.getText());
352
+ if (decl && isMemoCall(decl.getInitializer()))
353
+ return true;
205
354
  }
206
355
  }
207
- // Count props read OUTSIDE of passing to the root child
356
+ return false;
357
+ }
358
+ const decl = findVariableDeclarationByName(sourceFile, binding.importedName);
359
+ return !!decl && isMemoCall(decl.getInitializer());
360
+ }
361
+ function resolveImportedSourceFile(ctx, importDecl) {
362
+ let resolved;
363
+ try {
364
+ resolved = importDecl.getModuleSpecifierSourceFile() ?? undefined;
365
+ }
366
+ catch {
367
+ return undefined;
368
+ }
369
+ if (resolved) {
370
+ // The main Project caches resolved source files across reviewFile calls. If the file on disk
371
+ // changed since the last review (watch mode, test re-runs), refresh it so the rule sees fresh content.
372
+ try {
373
+ resolved.refreshFromFileSystemSync();
374
+ }
375
+ catch {
376
+ // File may have been deleted — caller will decide.
377
+ }
378
+ return resolved;
379
+ }
380
+ const spec = importDecl.getModuleSpecifierValue();
381
+ if (!spec.startsWith('.'))
382
+ return undefined;
383
+ const baseDir = dirname(ctx.filePath);
384
+ const candidates = [];
385
+ if (/\.[cm]?[jt]sx?$/.test(spec)) {
386
+ candidates.push(resolve(baseDir, spec));
387
+ if (spec.endsWith('.js')) {
388
+ candidates.push(resolve(baseDir, `${spec.slice(0, -3)}.ts`));
389
+ candidates.push(resolve(baseDir, `${spec.slice(0, -3)}.tsx`));
390
+ }
391
+ else if (spec.endsWith('.jsx')) {
392
+ candidates.push(resolve(baseDir, `${spec.slice(0, -4)}.tsx`));
393
+ }
394
+ }
395
+ else {
396
+ candidates.push(resolve(baseDir, `${spec}.ts`));
397
+ candidates.push(resolve(baseDir, `${spec}.tsx`));
398
+ candidates.push(resolve(baseDir, `${spec}/index.ts`));
399
+ candidates.push(resolve(baseDir, `${spec}/index.tsx`));
400
+ }
401
+ for (const candidate of candidates) {
402
+ if (!existsSync(candidate))
403
+ continue;
404
+ const auxProject = new Project({
405
+ useInMemoryFileSystem: true,
406
+ skipAddingFilesFromTsConfig: true,
407
+ compilerOptions: { target: 99, module: 99, moduleResolution: 100, jsx: 4 },
408
+ });
409
+ return auxProject.createSourceFile(candidate, readFileSync(candidate, 'utf-8'), { overwrite: true });
410
+ }
411
+ return undefined;
412
+ }
413
+ function propDrillPassthrough(ctx) {
414
+ const findings = [];
415
+ for (const fn of iterComponentFunctions(ctx)) {
416
+ const analysis = analyzePassthroughComponent(fn);
417
+ if (analysis) {
418
+ const passthroughCount = analysis.passthroughProps.length;
419
+ findings.push(finding('prop-drill-passthrough', 'warning', 'pattern', `'${analysis.componentName}' passes ${passthroughCount} prop${passthroughCount === 1 ? '' : 's'} (${analysis.passthroughProps.join(', ')}) through to <${analysis.childTag}> without reading ${passthroughCount === 1 ? 'it' : 'them'} — consider 'children' prop or React context`, ctx.filePath, fn.getStartLineNumber(), 1, {
420
+ suggestion: `Accept <${analysis.childTag} .../> as the 'children' prop, or move the shared data into a React context. Passing props through an intermediate component forces it to re-render whenever any of them change.`,
421
+ }));
422
+ }
423
+ }
424
+ return findings;
425
+ }
426
+ // ── Rule: prop-drill-chain ───────────────────────────────────────────────
427
+ // Current file passes props into an imported wrapper component that itself
428
+ // passes those same props onward without reading them. Walks up to MAX_HOPS
429
+ // imported components to detect drilling that spans 3+ files, not just 2.
430
+ const MAX_PROP_DRILL_HOPS = 3;
431
+ function walkPropDrillChain(initialCarriedProps, initialBinding, ctx) {
432
+ const hops = [];
433
+ const visitedFiles = new Set([ctx.filePath]);
434
+ const analysisCache = new Map();
435
+ let currentCarriedProps = initialCarriedProps;
436
+ let currentBinding = initialBinding;
437
+ let currentSf;
438
+ for (let hopIdx = 0; hopIdx < MAX_PROP_DRILL_HOPS; hopIdx++) {
439
+ if (!currentBinding)
440
+ break;
441
+ currentSf = resolveImportedSourceFile(hopIdx === 0 ? ctx : { ...ctx, filePath: currentSf.getFilePath(), sourceFile: currentSf }, currentBinding.importDecl);
442
+ if (!currentSf)
443
+ break;
444
+ const nextFilePath = currentSf.getFilePath();
445
+ if (visitedFiles.has(nextFilePath))
446
+ break;
447
+ visitedFiles.add(nextFilePath);
448
+ const importedFn = findImportedComponentFunction(currentSf, currentBinding);
449
+ if (!importedFn)
450
+ break;
451
+ const cacheKey = `${nextFilePath}::${currentBinding.importedName}::${currentBinding.isDefault}`;
452
+ let analysis = analysisCache.get(cacheKey);
453
+ if (analysis === undefined) {
454
+ analysis = analyzePassthroughComponent(importedFn);
455
+ analysisCache.set(cacheKey, analysis);
456
+ }
457
+ if (!analysis)
458
+ break;
459
+ const sharedProps = currentCarriedProps.filter((p) => analysis.passthroughProps.includes(p));
460
+ if (sharedProps.length < 2)
461
+ break;
462
+ hops.push({
463
+ componentName: analysis.componentName,
464
+ childTag: analysis.childTag,
465
+ filePath: nextFilePath,
466
+ props: sharedProps,
467
+ });
468
+ const nextCtx = { ...ctx, filePath: nextFilePath, sourceFile: currentSf };
469
+ const nextBinding = findImportBinding(nextCtx, analysis.childTag);
470
+ if (!nextBinding)
471
+ break;
472
+ currentCarriedProps = sharedProps;
473
+ currentBinding = nextBinding;
474
+ }
475
+ return hops;
476
+ }
477
+ function propDrillChain(ctx) {
478
+ const findings = [];
479
+ for (const fn of iterComponentFunctions(ctx)) {
480
+ const localAnalysis = analyzePassthroughComponent(fn);
481
+ if (!localAnalysis)
482
+ continue;
483
+ const binding = findImportBinding(ctx, localAnalysis.childTag);
484
+ if (!binding)
485
+ continue;
486
+ const hops = walkPropDrillChain(localAnalysis.passthroughProps, binding, ctx);
487
+ if (hops.length === 0)
488
+ continue;
489
+ const firstHop = hops[0];
490
+ const sharedProps = firstHop.props;
491
+ // Describe the chain: local → first imported wrapper → ... → last wrapper's child
492
+ const chainDesc = hops.length === 1
493
+ ? `<${localAnalysis.childTag}>, which then passes them through to <${firstHop.childTag}>`
494
+ : `<${localAnalysis.childTag}> → ${hops.map((h) => `<${h.componentName}>`).join(' → ')} → <${hops[hops.length - 1].childTag}>`;
495
+ findings.push(finding('prop-drill-chain', 'warning', 'pattern', `'${localAnalysis.componentName}' drills props (${sharedProps.join(', ')}) across ${hops.length + 1} component${hops.length + 1 === 1 ? '' : 's'}: ${chainDesc}`, ctx.filePath, fn.getStartLineNumber(), 1, {
496
+ suggestion: 'Collapse the intermediate wrappers, switch to children-based composition, or lift the shared data into React context so the props stop crossing multiple component boundaries',
497
+ }));
498
+ }
499
+ return findings;
500
+ }
501
+ // ── Rule: memoized-child-inline-prop ─────────────────────────────────────
502
+ // Inline object/array/function props create a new identity every render and
503
+ // defeat React.memo's shallow prop comparison for that child.
504
+ function collectMemoizedComponentNames(ctx) {
505
+ const names = new Set();
506
+ for (const decl of ctx.sourceFile.getDescendantsOfKind(SyntaxKind.VariableDeclaration)) {
507
+ if (!isMemoCall(decl.getInitializer()))
508
+ continue;
509
+ const nameNode = decl.getNameNode();
510
+ if (Node.isIdentifier(nameNode) && /^[A-Z]/.test(nameNode.getText())) {
511
+ names.add(nameNode.getText());
512
+ }
513
+ }
514
+ return names;
515
+ }
516
+ function memoizedChildInlineProp(ctx) {
517
+ const findings = [];
518
+ const memoizedNames = collectMemoizedComponentNames(ctx);
519
+ const memoizedImportCache = new Map();
520
+ for (const fn of iterComponentFunctions(ctx)) {
208
521
  const body = fn.getBody();
209
522
  if (!body)
210
523
  continue;
211
- const bodyText = body.getText();
212
- // A prop is "consumed" if it appears somewhere other than as the RHS of an attribute
213
- // of the single root child. We approximate: count total identifier refs in the body,
214
- // and subtract the passthrough refs.
215
- const consumedProps = new Set();
216
- for (const propName of propNames) {
217
- if (propName === 'children')
524
+ const jsxNodes = [
525
+ ...body.getDescendantsOfKind(SyntaxKind.JsxOpeningElement),
526
+ ...body.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement),
527
+ ];
528
+ for (const jsx of jsxNodes) {
529
+ const tag = jsx.getTagNameNode().getText();
530
+ let isMemoizedChild = memoizedNames.has(tag);
531
+ if (!isMemoizedChild) {
532
+ if (!memoizedImportCache.has(tag)) {
533
+ const binding = findImportBinding(ctx, tag);
534
+ const importedSf = binding ? resolveImportedSourceFile(ctx, binding.importDecl) : undefined;
535
+ memoizedImportCache.set(tag, !!(binding && importedSf && isMemoizedExport(importedSf, binding)));
536
+ }
537
+ isMemoizedChild = memoizedImportCache.get(tag) ?? false;
538
+ }
539
+ if (!isMemoizedChild)
218
540
  continue;
219
- // Skip counting refs that are literally the attribute value of the root child.
220
- // For a shorthand pass like `<Child user={user} />`, the identifier `user`
221
- // appears TWICE in the body text: once as the attribute name and once as
222
- // the value expression. Subtract 2 per shorthand to compensate.
223
- const escaped = propName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
224
- const totalRefs = (bodyText.match(new RegExp(`\\b${escaped}\\b`, 'g')) ?? []).length;
225
- const passthroughRefs = passedWithShorthand.has(propName) ? 2 : 0;
226
- if (totalRefs - passthroughRefs > 0) {
227
- consumedProps.add(propName);
541
+ const unstableProps = [];
542
+ for (const attr of jsx.getAttributes()) {
543
+ if (!Node.isJsxAttribute(attr))
544
+ continue;
545
+ const attrName = attr.getNameNode().getText();
546
+ const init = attr.getInitializer();
547
+ if (!init || !Node.isJsxExpression(init))
548
+ continue;
549
+ const expr = init.getExpression();
550
+ if (!expr)
551
+ continue;
552
+ const isUnstable = Node.isArrowFunction(expr) ||
553
+ Node.isFunctionExpression(expr) ||
554
+ Node.isObjectLiteralExpression(expr) ||
555
+ Node.isArrayLiteralExpression(expr);
556
+ if (isUnstable)
557
+ unstableProps.push(attrName);
228
558
  }
559
+ if (unstableProps.length === 0)
560
+ continue;
561
+ findings.push(finding('memoized-child-inline-prop', 'warning', 'pattern', `<${tag}> is memoized with React.memo, but inline prop${unstableProps.length === 1 ? '' : 's'} (${unstableProps.join(', ')}) create a new identity every render and defeat memoization`, ctx.filePath, jsx.getStartLineNumber(), 1, {
562
+ suggestion: 'Hoist static literals, memoize object/array props with useMemo, and memoize callback props with useCallback before passing them to a memoized child',
563
+ }));
229
564
  }
230
- const passthroughCount = [...passedToChild].filter((p) => !consumedProps.has(p)).length;
231
- if (passthroughCount >= 2 && propNames.length >= 3) {
232
- const info = isComponentFunction(fn);
233
- findings.push(finding('prop-drill-passthrough', 'warning', 'pattern', `'${info.name}' passes ${passthroughCount} of ${propNames.length} props through to <${tag}> without reading them — consider 'children' prop or React context`, ctx.filePath, fn.getStartLineNumber(), 1, {
234
- suggestion: `Accept <${tag} .../> as the 'children' prop, or move the shared data into a React context. Passing props through an intermediate component forces it to re-render whenever any of them change.`,
565
+ }
566
+ return findings;
567
+ }
568
+ // ── Rule: memoized-child-inline-children ─────────────────────────────────
569
+ // Inline JSX children create fresh React element objects every render, so a
570
+ // React.memo child receiving them through `children` cannot bail out.
571
+ function memoizedChildInlineChildren(ctx) {
572
+ const findings = [];
573
+ const memoizedNames = collectMemoizedComponentNames(ctx);
574
+ const memoizedImportCache = new Map();
575
+ for (const fn of iterComponentFunctions(ctx)) {
576
+ const body = fn.getBody();
577
+ if (!body)
578
+ continue;
579
+ for (const jsx of body.getDescendantsOfKind(SyntaxKind.JsxElement)) {
580
+ const opening = jsx.getOpeningElement();
581
+ const tag = opening.getTagNameNode().getText();
582
+ let isMemoizedChild = memoizedNames.has(tag);
583
+ if (!isMemoizedChild) {
584
+ if (!memoizedImportCache.has(tag)) {
585
+ const binding = findImportBinding(ctx, tag);
586
+ const importedSf = binding ? resolveImportedSourceFile(ctx, binding.importDecl) : undefined;
587
+ memoizedImportCache.set(tag, !!(binding && importedSf && isMemoizedExport(importedSf, binding)));
588
+ }
589
+ isMemoizedChild = memoizedImportCache.get(tag) ?? false;
590
+ }
591
+ if (!isMemoizedChild)
592
+ continue;
593
+ const unstableChildren = jsx.getJsxChildren().filter((child) => Node.isJsxElement(child) ||
594
+ Node.isJsxSelfClosingElement(child) ||
595
+ Node.isJsxFragment(child) ||
596
+ (Node.isJsxExpression(child) &&
597
+ (() => {
598
+ const expr = child.getExpression();
599
+ return (expr != null &&
600
+ (Node.isArrowFunction(expr) ||
601
+ Node.isFunctionExpression(expr) ||
602
+ Node.isObjectLiteralExpression(expr) ||
603
+ Node.isArrayLiteralExpression(expr)));
604
+ })()));
605
+ if (unstableChildren.length === 0)
606
+ continue;
607
+ findings.push(finding('memoized-child-inline-children', 'warning', 'pattern', `<${tag}> is memoized with React.memo, but its inline children create new React element identities every render and defeat memoization`, ctx.filePath, opening.getStartLineNumber(), 1, {
608
+ suggestion: 'Hoist the child subtree outside the parent render, memoize it with useMemo, or restructure the component so the memoized child receives stable primitive props instead of inline children',
235
609
  }));
236
610
  }
237
611
  }
@@ -312,8 +686,8 @@ function parentRerenderViaState(ctx) {
312
686
  if (stateVars.size === 0)
313
687
  continue;
314
688
  // Already composing with children? Skip — the user is on the correct path.
315
- const propNames = getDestructuredPropNames(fn);
316
- const alreadyComposesChildren = propNames?.includes('children') ?? false;
689
+ const propBindings = getDestructuredPropBindings(fn);
690
+ const alreadyComposesChildren = propBindings?.some((p) => p.propName === 'children') ?? false;
317
691
  if (alreadyComposesChildren)
318
692
  continue;
319
693
  // Require a clean single-root returned JSX tree. Fragments, conditional
@@ -356,5 +730,12 @@ function parentRerenderViaState(ctx) {
356
730
  return findings;
357
731
  }
358
732
  // ── Exported composition rules ───────────────────────────────────────────
359
- export const reactCompositionRules = [childrenNotUsed, propDrillPassthrough, parentRerenderViaState];
733
+ export const reactCompositionRules = [
734
+ childrenNotUsed,
735
+ propDrillPassthrough,
736
+ propDrillChain,
737
+ memoizedChildInlineProp,
738
+ memoizedChildInlineChildren,
739
+ parentRerenderViaState,
740
+ ];
360
741
  //# sourceMappingURL=react-composition.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"react-composition.js","sourceRoot":"","sources":["../../src/rules/react-composition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"react-composition.js","sourceRoot":"","sources":["../../src/rules/react-composition.ts"],"names":[],"mappings":"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"}