SkillAgentSearch skills...

Total

Basic exhaustiveness checking of unions in Elixir

Install / Use

/learn @lpil/Total
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

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
  end
end

The 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

def deps do
  [
    {:total, "~> 0.1.0"}
  ]
end

Related Skills

View on GitHub
GitHub Stars16
CategoryDevelopment
Updated2y ago
Forks0

Languages

Elixir

Security Score

80/100

Audited on Nov 10, 2023

No findings