ExQuality is a parallel code quality checker for Elixir that runs format, compile, credo, dialyzer, dependency checks, and tests concurrently. Stages are auto-enabled based on installed dependencies (e.g., credo, dialyxir, doctor, gettext, mix_audit, excoveralls).
mix quality --quick- Use during: Active development, frequent changes, implementing features
- Runs: format, compile (dev+test), credo, dependencies, tests, doctor/gettext
- Skips: dialyzer (slow), coverage enforcement
mix quality- Use before: Commits, pull requests, CI/CD
- Runs: Everything including dialyzer and coverage enforcement
mix quality --quick # Fast iteration mode
mix quality --skip-dialyzer # Skip type checking
mix quality --skip-credo # Skip static analysis
mix quality --skip-doctor # Skip doc coverage
mix quality --skip-gettext # Skip translation checks
mix quality --skip-dependencies # Skip dependency checksFlags can be combined: mix quality --quick --skip-credo
Stages can be configured in .quality.exs (e.g., [dialyzer: [enabled: false], credo: [strict: false]]).
Do not pipe mix quality output through tail, head, or any truncation. The tool already captures and manages output to present only the minimal result needed. Truncating may hide critical failure details, file:line references, and summary information.
# Correct
mix quality
mix quality --quick
# Wrong - do not truncate
mix quality | tail -50
mix quality 2>&1 | tail -100✓ Format: No changes needed (0.1s)
✓ Compile: dev + test compiled (1.8s)
✓ Credo: No issues (1.2s)
✓ Dependencies: No unused dependencies (0.3s)
✓ Tests: 248 passed, 87.3% coverage (5.2s)
✅ All quality checks passed!
When ExQuality fails, output includes file:line references:
- Parse file:line to locate issues
- Read affected files
- Explain what needs fixing
- Suggest/implement fixes
- Re-run
mix quality --quick
Example failure:
✗ Credo: 5 issue(s) (0.4s)
────────────────────────────────────
lib/user.ex:42 - Module missing @moduledoc
lib/api.ex:58 - Function too complex
After code changes:
mix quality --quick # Fast feedback
Before committing:
mix quality # Full verification
Dialyzer is slow:
# .quality.exs
[dialyzer: [enabled: false]]Coverage failing but tests pass:
mix quality --quick # Skips coverage enforcementUnused dependencies found:
# ExQuality tells you which deps to remove
mix deps.unlock package_nameSecurity vulnerabilities found:
- Update affected packages to patched versions
- Follow recommendations in ExQuality output