Local Type Inference is a rewrite of Flow’s type inference algorithm. This change makes Flow’s inference behavior more reliable and predictable. It replaces a global inference scheme that Flow has relied on since its inception and that has often been the culprit of confusing action-at-a-distance behavior, in exchange for modestly increased type annotations.
It is now enabled by default! See this blog post for more details on the new system and steps to upgrade your project.
Likely to cause new Flow errors:
When a variable is initialized at declaration, subsequent assignment in a conditional branch will no longer cause later reads to get a union type. This is already the case if the variable is annotated. As a result of this change, you might get new type errors. Example
When a variable is uninitialized or initialized to null, we use all the assignments to the variables as its initial type. We now no longer consider assignments from a child generic function. As a result, you might get new invalid-declaration errors. Example
Fix object value rest. It will now error if attempting to read a write-only or setter-only property (it reads while copying the properties). Additionally, the resulting rest object will no longer preserve read-only variance (as it is a copy).
The type utility $Partial will now preserve the variance of the input object type's properties. For example, if the the input was a read-only object, now that output will also be a read-only object (with optional properties).
string and symbol are no longer subtypes of an interface
Error on with statements in non-strict mode. It was already a syntax error in strict mode.
New Features:
A native Apple Silicon precompiled binary is now available via the GitHub Releases page. It is not yet available via flow-bin. Internally, we see about 2X faster performance than using Rosetta, and 4X faster performance than on actual Intel Macs.
Add local variable renaming capabilities to the LSP
Add "Find All References" functionality to the LSP for showing local references
JSDoc autocomplete will automatically trigger after typing /**
Add option for automatically closing JSX tags in the IDE
Hovering in the IDE now shows both the unevaluated and evaluated type of the target expression.
Add use_mixed_in_catch_variables config option that makes catch variables default to mixed instead of any
Rename $Partial utility type to Partial. $Partial will continue working as an alias for at least one more version - use that period of time to codemod it to Partial.
Add the Required utility type. It does the opposite of Partial: it makes optional properties required in object types.
Improve error when attempting to call Object.values on a Flow Enum, to point the user to using .members()
Improve error when using number and boolean primitives as a subtype of an interface
Improve error on tuple arity mismatch
Notable bug fixes:
Fix a bug preventing annotation hints from being used in tagged template expressions. This fix may get rid of some underconstrained-implicit-instantiation errors that were otherwise impossible to fix.
Fix error when autocompleting the method stub for a function type without parameter names
Document highlight in the IDE now correctly highlights destructured object keys
Autocomplete can suggest literals when the target type is $Keys
Local Type Inference is a rewrite of Flow’s type inference algorithm. This change makes Flow’s inference behavior more reliable and predictable. It replaces a global inference scheme that Flow has relied on since its inception and that has often been the culprit of confusing action-at-a-distance behavior, in exchange for modestly increased type annotations.
It is now enabled by default! See this blog post for more details on the new system and steps to upgrade your project.
Likely to cause new Flow errors:
When a variable is initialized at declaration, subsequent assignment in a conditional branch will no longer cause later reads to get a union type. This is already the case if the variable is annotated. As a result of this change, you might get new type errors. Example
When a variable is uninitialized or initialized to null, we use all the assignments to the variables as its initial type. We now no longer consider assignments from a child generic function. As a result, you might get new invalid-declaration errors. Example
Fix object value rest. It will now error if attempting to read a write-only or setter-only property (it reads while copying the properties). Additionally, the resulting rest object will no longer preserve read-only variance (as it is a copy).
The type utility $Partial will now preserve the variance of the input object type's properties. For example, if the the input was a read-only object, now that output will also be a read-only object (with optional properties).
string and symbol are no longer subtypes of an interface
Error on with statements in non-strict mode. It was already a syntax error in strict mode.
New Features:
A native Apple Silicon precompiled binary is now available via the GitHub Releases page. It is not yet available via flow-bin. Internally, we see about 2X faster performance than using Rosetta, and 4X faster performance than on actual Intel Macs.
Add local variable renaming capabilities to the LSP
Add "Find All References" functionality to the LSP for showing local references
JSDoc autocomplete will automatically trigger after typing /**
Add option for automatically closing JSX tags in the IDE
Hovering in the IDE now shows both the unevaluated and evaluated type of the target expression.
Add use_mixed_in_catch_variables config option that makes catch variables default to mixed instead of any
Rename $Partial utility type to Partial. $Partial will continue working as an alias for at least one more version - use that period of time to codemod it to Partial.
Add the Required utility type. It does the opposite of Partial: it makes optional properties required in object types.
Improve error when attempting to call Object.values on a Flow Enum, to point the user to using .members()
Improve error when using number and boolean primitives as a subtype of an interface
Improve error on tuple arity mismatch
Notable bug fixes:
Fix a bug preventing annotation hints from being used in tagged template expressions. This fix may get rid of some underconstrained-implicit-instantiation errors that were otherwise impossible to fix.
Fix error when autocompleting the method stub for a function type without parameter names
Document highlight in the IDE now correctly highlights destructured object keys
Autocomplete can suggest literals when the target type is $Keys
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps flow-parser from 0.195.2 to 0.201.0.
Release notes
Sourced from flow-parser's releases.
... (truncated)
Changelog
Sourced from flow-parser's changelog.
... (truncated)
Commits
f4278b7
fix missing dependency8abbe9c
v0.201.00ff8bb8
[IDE] Fix rename with shorthand named importsb8531a1
Make LTI the default881af7e
[codemod] Explicitly use constrain_writes in some codemod commands2568511
[tests] Use LTI as default in tests25da2e5
Do not consider TaggedTemplates to be definitely synthesizable2c2f683
[lti] Start with empty cache when checking expressions in checking modebb2f267
[name_resolver] Avoiding creating phi nodes when merging with havoc if the va...cec5df5
Delete comprehension/generator AST nodeDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)