Skip to content

Set-theoretic types: inference of all language constructs #14558

@josevalim

Description

@josevalim

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, and behaviour_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.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions