WhyRecompile - Mix tasks to explore project files dependency graph

I’d like to introduce WhyRecompile, a library provides utilities to work with Elixir files dependency graph. This aims to complement the mix xref graph, helps you figure out questions like: Why file A and B recompiles when I edit file C?

Commands

Show all files with dependencies count

mix why_recompile list

-----------------------+-----------------------------+---------------------------------
 File path             | Number of recompile files   | Number of MAYBE recompile files
-----------------------+-----------------------------+---------------------------------
 lib/fixtures/D3.ex    | 2                           | 0
 lib/fixtures/B4.ex    | 2                           | 0
 lib/fixtures/B3.ex    | 2                           | 0
 lib/fixtures/D2.ex    | 1                           | 0
 lib/fixtures/B2.ex    | 1                           | 0
 lib/fixtures/B1.ex    | 1                           | 0
 lib/fixtures/A3.ex    | 1                           | 0
 lib/fixtures/A2.ex    | 1                           | 0
-----------------------+-----------------------------+----------------------------------

Show all dependencies of a single file

You can increase the verbosity level for more detailed information: the dependency chain, the code snippets that cause such dependency, …

mix why_recompile show lib/fixtures/D3.ex

lib/fixtures/D1.ex
lib/fixtures/D2.ex

I hope that others find it useful! Please feel free to post any comments/feedback here, or issues on GitHub.

9 Likes