@samitouri / QOS-React / commits / 6924786973

[be] Change validate functions to not return unnecessary Result

These validations needs to be able to transitively check for violations within function expressions, without immediately erroring. So the inner "-Impl" helpers return a Result. But the outer, exported validate functions don't need to return a Result, especially since TS has no Rust-style enforcement that return values are actually used. Unwrapping within the validation means the caller can't forget to do so and inadvertently silence the errors.

Joe Savona committed Feb 13, 2024 at 16:45 UTC 69247869734374dd3f66076228f78df8ee0ca238
3 files changed +6 -10
compiler/packages/babel-plugin-react-forget/src/Entrypoint/Pipeline.ts
+2 -2
@@ -175,11 +175,11 @@ function* runWithEnvironment(
175 }
176
177 if (env.config.validateRefAccessDuringRender) {
178 - validateNoRefAccessInRender(hir).unwrap();
178 + validateNoRefAccessInRender(hir);
179 }
180
181 if (env.config.validateNoSetStateInRender) {
182 - validateNoSetStateInRender(hir).unwrap();
182 + validateNoSetStateInRender(hir);
183 }
184
185 inferReactivePlaces(hir);
compiler/packages/babel-plugin-react-forget/src/Validation/ValidateNoRefAccesInRender.ts
+2 -4
@@ -24,11 +24,9 @@ import { Err, Ok, Result } from "../Utils/Result";
24 * Validates that a function does not access a ref value during render. This includes a partial check
25 * for ref values which are accessed indirectly via function expressions.
26 */
27 -export function validateNoRefAccessInRender(
28 - fn: HIRFunction
29 -): Result<void, CompilerError> {
27 +export function validateNoRefAccessInRender(fn: HIRFunction): void {
28 const refAccessingFunctions: Set<IdentifierId> = new Set();
31 - return validateNoRefAccessInRenderImpl(fn, refAccessingFunctions);
29 + validateNoRefAccessInRenderImpl(fn, refAccessingFunctions).unwrap();
30 }
31
32 function validateNoRefAccessInRenderImpl(
compiler/packages/babel-plugin-react-forget/src/Validation/ValidateNoSetStateInRender.ts
+2 -4
@@ -39,11 +39,9 @@ import { Err, Ok, Result } from "../Utils/Result";
39 * y();
40 * ```
41 */
42 -export function validateNoSetStateInRender(
43 - fn: HIRFunction
44 -): Result<void, CompilerError> {
42 +export function validateNoSetStateInRender(fn: HIRFunction): void {
43 const unconditionalSetStateFunctions: Set<IdentifierId> = new Set();
46 - return validateNoSetStateInRenderImpl(fn, unconditionalSetStateFunctions);
44 + validateNoSetStateInRenderImpl(fn, unconditionalSetStateFunctions).unwrap();
45 }
46
47 function validateNoSetStateInRenderImpl(