Releases: facebook/flow
Releases · facebook/flow
v0.262.0
Likely to cause new Flow errors:
- Referencing
React$Component
directly will now be an error. - Use of
React$ComponentType
,React$Context
andReact$RefSetter
will now triggerinternal-type
errors.
New Features:
- Added types for JSX intrinsics, which will cause new errors and show autocomplete for DOM intrinsics like
div
Notable bug fixes:
- Replace incorrect definition for
ClientRect
andClientRectList
with aliases toDOMRect
andDOMRectList
This fixes the type definitions for the DOM APIs in Flow, but replacing an nonexistent globalsClientRect
andClientRectList
types with just an alias toDOMRect
andDOMRectList
. - fixed a bug that caused spurious errors on rest array assignments (e.g. try-Flow).
- When a library definition file has changed, Flow will no longer just stop the server. Instead, Flow will properly recheck everything, even under lazy mode.
- We now allow something of type
React.ComponentType<{}>
to be a subtype ofcomponent()
IDE:
- Component syntax components will now show up in document symbols
Library Definitions:
- Most of the bundled libdefs will no longer be maintained and shipped with Flow. Going forward, they should be downloaded from flow-typed. To maintain the same behavior as before, you should have a
flow-typed.config.json
in the root of your project with the following content:
{
"env": ["node", "dom", "bom", "intl", "cssom", "indexeddb", "serviceworkers", "webassembly"]
}
v0.261.2
Notable bug fixes:
- Fixed a bug that causes incorrect updates to our index that tracks usage of exports, which leads to incorrect autoimport-ranked-by-usage results.
v0.261.1
Notable bug fixes:
- Fixed a crash after initialization with saved state if the typing for
react
module is provided as a userland module.
v0.261.0
New Features:
- Bigint values inside of template literals now coerce to strings, e.g.
`${1n}`
. Addition with string (e.g.1n + 'blah'
) is still banned. - Add ability to resolve node package entrypoints/exports
- Flow now allows inference of type guards for simple expression arrow functions with one parameter. For example, in
["a", null].filter(s => s != null)
it will automatically infer that the arrow function encodes ax is string
type guard and will apply it on the input array resulting in aArray<string>
. (try-Flow) module.system.node.root_relative_dirname
will allow conditional mapping likemodule.system.node.root_relative_dirname='<PROJECT_ROOT>/foo' -> 'bar'
. Under such config,import 'a'
will only be resolved to<PROJECT_ROOT>/bar/a
ifimport 'a'
is in a file in the<PROJECT_ROOT>/foo
directory. This feature will be helpful if you want to combine two flow roots with differentmodule.system.node.root_relative_dirname
config.
Likely to cause new Flow errors:
- When an opaque type is refined to be not null/undefined, we now refine the opaque type's upper bound rather than returning the opaque type unmodified.
Notable bug fixes:
- Flow will error more consistently on incompatible uses of refined string, number and boolean literal types (e.g. try-Flow)
- Fixed some cases of type filtering during type guard refinement (e.g. try-Flow)
- Fixed a bug of missing errors when certain functions were checked against interfaces (e.g. try-Flow)
- Fixed negation of refinement of type-guard functions with multiple parameters (e.g. try-Flow)
- Relaxed type-guard consistency checks when the function returns with
true
orfalse
. (e.g. try-Flow)
Parser:
- We now provide parsing support for
declare global {...}
(using it will still result in an error). The AST will have the shape of
{
"type":"DeclareNamespace",
"loc": ...,
"range": ...,
"global":true,
"id":{
"type":"Identifier",
"loc": ...,
"range":...,
"name":"global",
"typeAnnotation":null,
"optional":false
},
"body":{
"type":"BlockStatement",
...
},
}
Library Definitions:
- The global
React$PureComponent
is removed. If you want to refer to it, it needs to be imported fromreact
.
v0.260.0
New Features:
- You may now write object literals with Flow Enum values as computed keys. This will result in a dictionary type, keyed by the Flow Enum type. Note that all possible Flow Enum representation types are valid object keys, so we just support all of them.
- You can use
number
typed keys (rather than just number literals) to create objects, these will be treated as dictionaries{[number]: T}
Notable bug fixes:
- Fixed soundness hole in subtyping of type guard functions (e.g. try-Flow)
- Fixed a bug that caused spurious errors when type guards were used in private methods (e.g. try-Flow)
- Flow will no longer invalidate refinements made before the loop for const-like variables within a loop (example)
IDE:
- For identifiers of array patterns bind to a require call, go-to-definition will jump to itself.
Library Definitions:
- The internal type
React$FragmentType
is removed from Flow's builtin global type definitions.
v0.259.1
Notable bug fixes:
- Fixed a bug that causes experimental auto-import-on-paste to miss imports for component names used in jsx.
v0.259.0
Likely to cause new Flow errors:
- When a function without statics is passed to a place that expects inexact objects, the error will just say "function without statics is incompatible with object", instead of listing all the missing props in statics in errors. Error code might change.
- When a non-callable object is passed to a place expecting functions, we will have a clearer message saying "non-callable object is incompatible with function" instead of the current error talking about the callable property. Some error code might change, which requires new suppressions.
Notable bug fixes:
- For errors involving unions and intersections, we will now show a list of possible causes in a sorted order: the ones that are mostly likely to be the cause will be shown first.
IDE:
- We slightly changed the go-to-definition behavior for export from statements:
- For
bar
inexport {foo as bar} from '...'
, we will always jump to itself - For
foo
inexport {foo} from '...'
orexport {foo as bar} from '...'
, we will always jump to the name at the export, if this statement is well typed. - For
foo
inexport {foo} from '...'
orexport {foo as bar} from '...'
, we will jump to itself if the statement is not well-typed.
- For
- Go-to-definition on intrinsic jsx elements will jump to nowhere instead of jump to itself.
- Go-to-definition for
require('...')
expression will now jump to the default export of an ESM module if available, or the first export of an ESM module.
Library Definitions:
- Type for
React.Context
has been updated to support React 19's context as provider model. Given this change, you might need additional annotations on exports. e.g.
v0.258.1
IDE:
- Fixed go-to-definition for Meta-specific module references.
v0.258.0
Likely to cause new Flow errors:
- method-unbinding errors will not affect choice over intersection members. (e.g. try-Flow)
- We now disallow coercions between functions and class statics.
- The ability to configure
react.ref_as_prop=disabled
is removed. - Use of
React$Node
andReact$MixedElement
outside of libdefs will now triggerinternal-type
errors.
Library Definitions:
- Improved definition of
Array.concat()
.
v0.257.1
Misc:
- Flow language server will stop advertising that we can handle all code actions kinds prefixed with
"source"
. It can help to prevent VSCode sending flow irrelevant code actions to handle during save.