Open
Description
Major milestones:
- Tracking of variables
- Type inference of patterns
- Type inference of guards
- Type inference for function application
- Type inference of return types
This is a more granular break down of what needs to be done:
- Map and struct updates
- Checking of all inlined functions from Kernel
- Checking of all inlined conversion functions
- Checking of
__STACKTRACE__
and raising functions - Support for local calls
- Support for remote calls
- Support for
__info__
,module_info
, andbehaviour_info
- Typing of :erlang inlined functions
-
for
comprehensions- generators
- :into
- :reduce
-
with
comprehensions - Detect never matching clauses and patterns (cond, case, try)
- Track precision in case and inferred clauses to perform elimination
- Detect overlapping clauses (case, receive, try, reduce)
- Exhaustiveness checks (case, try, cond, reduce)
- Unused clauses in private functions
- Tracking of mismatches in equality operators
- Tracking of structs in ordered comparison operators
- Move
compile.protocols
to parallel compiler - Type checking of protocol dispatch
- Type checking of impls
- Storing of inferred types in .beam files
- Infer based on all loaded applications
- Infer all Elixir modules at once
This was extracted from #13227 and will be followed up by #13881.