Vision: AI-friendly JSON output for Dialyzer warnings, optimized for Claude Code and similar tools.
Completed work: See CHANGELOG.md for finished tasks.
Phase 5: Complete — All planned features implemented. Ready for hex.pm release.
| Task | Description | Notes |
|---|---|---|
| Task 7 | --group-by-file flag |
Groups by file path, array of {file, count, warnings} |
| Task 6 | exact_compare → "code" |
1-line fix |
| Task 5 | Top-level metadata | schema_version, versions, timestamp |
| Task 8 | --compact JSONL output |
One warning per line |
| Task 9 | --filter-type flag |
Repeatable, OR logic |
| Basic JSON output | mix dialyzer.json outputs warnings as JSON |
Reuses dialyxir PLT |
| Quiet mode | --quiet suppresses non-JSON output |
Clean piping to jq |
| Summary mode | --summary-only for counts without details |
Quick health check |
| Group by warning | --group-by-warning clusters similar warnings |
Pattern identification |
| Warning classification | All 47 warning types classified | DialyzerJson.FixHint module |
| fix_hint in output | Each warning has fix_hint field |
Summary includes by_fix_hint |
| Tasks 3-4 | Module/function extraction for contract/callback warnings | 8 contract + 6 callback types |
Added fix_hint field to help AI editors prioritize warnings.
- Task 1: Classified all 47 dialyxir warning types into
"spec","code","pattern"categories - Task 2: Added
fix_hintto each warning andby_fix_hintto summary
Extended module and function extraction to cover all warning types.
- Task 3: Module extracted from 8 contract warning types and 6 callback warning types ✅
- Task 4: Function extracted from contract and callback warnings (guard_fail and pattern_match don't contain function info) ✅
Add metadata fields to the root JSON object for better tooling integration.
Fields to add:
schema_version: e.g. "1.0" (for future compatibility)dialyzer_version: from:dialyzerapp versionelixir_version: fromSystem.version()otp_version: from:erlang.system_info(:otp_release)run_at: ISO8601 timestamp (optional, include by default)
Success criteria:
- All version fields present in output
-
run_atis valid ISO8601 format - Existing
warningsandsummarystructure unchanged
Map exact_compare warning type to "code" (currently falls through to unknown). These are actionable warnings about == vs === comparisons.
Success criteria:
-
exact_compare→"code"in FixHint module - Test covers the mapping
Add --group-by-file flag to group warnings by file path instead of warning type.
Output format:
{
"groups": [
{ "file": "lib/foo.ex", "count": 3, "warnings": [...] }
],
"summary": { ... }
}Success criteria:
-
--group-by-filegroups warnings by file - Each group has
file,count, andwarningsfields - Default output (flat warnings) unchanged
Add --compact flag that outputs one JSON object per line (JSONL format) instead of a single JSON array. Useful for streaming large warning sets.
Success criteria:
-
--compactoutputs one warning per line - Each line is valid JSON
- Summary on final line in compact mode
Add --filter-type TYPE flag to output only warnings of a specific type. Can be repeated for multiple types.
Success criteria:
-
--filter-type no_returnshows only no_return warnings - Multiple
--filter-typeflags combine with OR logic - Summary reflects filtered count
3 tasks complete. See CHANGELOG.md for details. Added: hex.pm metadata, AGENTS.md, comprehensive README examples.