lpil/total
Basic exhaustiveness checking of unions in Elixir
{ "createdAt": "2019-06-23T20:30:40Z", "defaultBranch": "master", "description": "Basic exhaustiveness checking of unions in Elixir", "fullName": "lpil/total", "homepage": "", "language": "Elixir", "name": "total", "pushedAt": "2019-06-23T20:31:14Z", "stargazersCount": 16, "topics": [ "elixir-lang", "exhaustiveness-checking", "macros" ], "updatedAt": "2023-11-10T18:14:07Z", "url": "https://github.com/lpil/total"}Simple exhaustiveness checking of tuple + atom based unions.
defmodule MyType do require Total
# define a union Total.defunion(method() :: :get | :post | {:other, term()})end
defmodule Elsewhere do require MyType
# This is OK, all variants are covered def method_string(m) do MyType.method_case m do :get -> "GET" :post -> "POST" {:other, t} -> t end end
# This is a compile time error: missing `{:other, term()}` def method_string(m) do MyType.method_case m do :get -> "GET" :post -> "POST" end endendThe exhaustiness checking is very basic: bare atoms are checked and tuples have their tag and length checked, but their arguments are unchecked.
All other terms and guard clauses are ignored.
Installation
Section titled “Installation”def deps do [ {:total, "~> 0.1.0"} ]end