Back to Skills

dialyzer-analysis

verified

Use when analyzing and fixing Dialyzer warnings and type discrepancies in Erlang/Elixir code.

View on GitHub

Marketplace

han

TheBushidoCollective/han

Plugin

jutsu-dialyzer

Technique

Repository

TheBushidoCollective/han
60stars

jutsu/jutsu-dialyzer/skills/dialyzer-analysis/SKILL.md

Last Verified

January 24, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/TheBushidoCollective/han/blob/main/jutsu/jutsu-dialyzer/skills/dialyzer-analysis/SKILL.md -a claude-code --skill dialyzer-analysis

Installation paths:

Claude
.claude/skills/dialyzer-analysis/
Powered by add-skill CLI

Instructions

# Dialyzer Analysis

Understanding and fixing Dialyzer warnings in Erlang and Elixir code.

## Type Specifications

### Basic Specs

```elixir
@spec add(integer(), integer()) :: integer()
def add(a, b), do: a + b

@spec get_user(pos_integer()) :: {:ok, User.t()} | {:error, atom()}
def get_user(id) do
  # implementation
end
```

### Complex Types

```elixir
@type user :: %{
  id: pos_integer(),
  name: String.t(),
  email: String.t(),
  role: :admin | :user | :guest
}

@spec process_users([user()]) :: {:ok, [user()]} | {:error, String.t()}
```

### Generic Types

```elixir
@spec map_values(map(), (any() -> any())) :: map()
@spec filter_list([t], (t -> boolean())) :: [t] when t: any()
```

## Common Warnings

### Pattern Match Coverage

```elixir
# Warning: pattern match is not exhaustive
case value do
  :ok -> :success
  # Missing :error case
end

# Fixed
case value do
  :ok -> :success
  :error -> :failure
  _ -> :unknown
end
```

### No Return

```elixir
# Warning: function has no local return
def always_raises do
  raise "error"
end

# Fixed with spec
@spec always_raises :: no_return()
def always_raises do
  raise "error"
end
```

### Unmatched Returns

```elixir
# Warning: unmatched return
def process do
  {:error, "failed"}  # Return value not used
  :ok
end

# Fixed
def process do
  case do_something() do
    {:error, reason} -> handle_error(reason)
    :ok -> :ok
  end
end
```

### Unknown Functions

```elixir
# Warning: unknown function
SomeModule.undefined_function()

# Fixed: ensure function exists or handle dynamically
if Code.ensure_loaded?(SomeModule) and
   function_exported?(SomeModule, :function_name, 1) do
  SomeModule.function_name(arg)
end
```

## Type Analysis Patterns

### Union Types

```elixir
@type result :: :ok | {:ok, any()} | {:error, String.t()}

@spec handle_result(result()) :: any()
def handle_result(:ok), do: nil
def handle_result({:ok, value}), do: value
def handle_result({:error, msg}), do: Logger.error(msg)
```

### Opaque Types

```

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
3124 chars