dillon1000/react
Commit
Browse files Partially enable validateNoSetStateInRender
The approach i initially took to validating function expressions was to try to extend the mutable range if they are called during render, and then use the mutable range of a function to determine if it's called during render later. However there are cases where the range can be extended for other reasons, as @poteto discovered, so we can't rely on the range extension. We've had several of our validations completely off as a result of this. In this PR i'm re-enabling @poteto's ValidateNoSetStateInRender pass by default, but making the function expression checking use a separate compiler flag. This means we'll have some false negatives, but should guarantee that we avoid false positives. This means we can definitely catch things like: ``` const [state, setState] = useState(false); setState(true); ``` Which we would have allowed by default before.
Changed paths6 files
First-parent comparisoncompiler/packages/babel-plugin-react-forget/src/HIR/Environment.ts ModifiedM compiler/packages/babel-plugin-react-forget/src/Validation/ValidateNoSetStateInRender.ts ModifiedM compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.bug-validate-no-set-state-not-all-mutable-range-extensions-are-bad.expect.md ModifiedM compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.bug-validate-no-set-state-not-all-mutable-range-extensions-are-bad.js ModifiedM compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.todo-unconditional-set-state-lambda.expect.md ModifiedM compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.todo-unconditional-set-state-lambda.js ModifiedPatch
Files changed
Rendering syntax-highlighted changes…