The only unsupported one is binding patterns, which aren't supported by the codefix.
The code was a lot faster to write without supporting them, but there's
no real barrier besides that.
* Infer from arrows from usage.
Previously only function expressions were, and only those with an easily
accessible name. Now any arrow function or function expression will
infer from usage.
* remove isApplicableFunctionForInference
*all* functions are applicable for inference now.
Previously, the compiler would crash when binding a non-top-level
property assignment on the symbol of an unresolved module:
```js
import x from 'arglebaz'
{
x.bar = 1
}
```
That's because `x` looks like an alias but doesn't have a
valueDeclaration (since there is no file named 'arglebaz'), and the new
code for binding Object.defineProperty calls forgot to check for an
undefined valueDeclaration.
This change adds the checks for an undefined valueDeclaration.
* Clamp calculated sourcemap positions rather than throwing, to allow the underlying file to drift out of date with the sourcemap without a crash
* Clamp line as well
* constructor functions infer from call+construct
Also fix an incorrect combining of inferences for rest parameters: the
inferred types will be arrays in the body of the function and the
arguments from outside the function will be the element type.
* All functions infer from call+construct contexts
* Initial version, doesn't work for primitives yet.
Need to find out why.
* Primitives now work, plus improve error message
null and void don't even parse without parameter names so they are not
tested.
* Codefix: Add names to nameless parameters
* Improve error wording
* Add detail to error message
Previously, type checking was turned off for all assignment
declarations. This is a problem when the declarations are annotated with
jsdoc types.
This PR checks assignment declarations, *except* for expando
initialisers. Expando initialisers are
1. Empty object types.
2. Function types.
3. Class types.
4. Non-empty object types when the assignment declaration kind is
prototype assignment or module.exports assignment.
* string|number inferences are low priority
Also, refactor unifyFromContext to explicitly handle priorities
* string/number/strnum are not mutually exclusive
* Assert that high/low can't apply to same element