Skip to content

Commit 4b3e662

Browse files
authored
[compiler] Add VoidUseMemo rule to RecommendedLatest (#34783)
Adds a new error category VoidUseMemo which is only enabled in the RecommendedLatest preset for now.
1 parent 3e1b34d commit 4b3e662

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

compiler/packages/babel-plugin-react-compiler/src/CompilerError.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,8 @@ function printErrorSummary(category: ErrorCategory, message: string): string {
536536
case ErrorCategory.StaticComponents:
537537
case ErrorCategory.Suppression:
538538
case ErrorCategory.Syntax:
539-
case ErrorCategory.UseMemo: {
539+
case ErrorCategory.UseMemo:
540+
case ErrorCategory.VoidUseMemo: {
540541
heading = 'Error';
541542
break;
542543
}
@@ -582,6 +583,10 @@ export enum ErrorCategory {
582583
* Checking for valid usage of manual memoization
583584
*/
584585
UseMemo = 'UseMemo',
586+
/**
587+
* Checking that useMemos always return a value
588+
*/
589+
VoidUseMemo = 'VoidUseMemo',
585590
/**
586591
* Checking for higher order functions acting as factories for components/hooks
587592
*/
@@ -977,6 +982,16 @@ function getRuleForCategoryImpl(category: ErrorCategory): LintRule {
977982
preset: LintRulePreset.Recommended,
978983
};
979984
}
985+
case ErrorCategory.VoidUseMemo: {
986+
return {
987+
category,
988+
severity: ErrorSeverity.Error,
989+
name: 'void-use-memo',
990+
description:
991+
'Validates that useMemos always return a value. See [`useMemo()` docs](https://react.dev/reference/react/useMemo) for more information.',
992+
preset: LintRulePreset.RecommendedLatest,
993+
};
994+
}
980995
case ErrorCategory.IncompatibleLibrary: {
981996
return {
982997
category,

compiler/packages/babel-plugin-react-compiler/src/Inference/DropManualMemoization.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ export function dropManualMemoization(
454454
if (!hasNonVoidReturn(funcToCheck.loweredFunc.func)) {
455455
errors.pushDiagnostic(
456456
CompilerDiagnostic.create({
457-
category: ErrorCategory.UseMemo,
457+
category: ErrorCategory.VoidUseMemo,
458458
reason: 'useMemo() callbacks must return a value',
459459
description: `This ${
460460
manualMemo.loadInstr.value.kind === 'PropertyLoad'

0 commit comments

Comments
 (0)