Mix xref and Elixir compiler warnings
The release of Elixir v1.3 added a mix task called xref
for performing cross reference checks of your code. mix xref
gives us some handy tools!
Find unreachable code:
❯ mix xref unreachable
lib/exonk8s/foo.ex:16: SomeModule.non_existant/0
Find callers of modules and functions:
❯ mix xref callers SomeModule
lib/exonk8s/foo.ex:16: SomeModule.non_existant/0
Generate a dependency graph:
> mix xref graph
lib/exonk8s.ex
├── lib/exonk8s/repo.ex
└── lib/router.ex
└── lib/exonk8s/musician_controller.ex (compile)
├── lib/exonk8s/foo.ex
├── lib/exonk8s/musician.ex
└── lib/exonk8s/repo.ex
...snipped for brevity
The release of Elixir v1.6 added the module attribute @deprecated
to enable library authors to warn users of deprecated functions.
❯ mix xref deprecated
Compiling 2 files (.ex)
Foo Loaded
warning: ExOnK8s.Foo.lazy/0 is deprecated. You should be more eager.
lib/exonk8s/musician_controller.ex:10
lib/exonk8s/musician_controller.ex:10: ExOnK8s.Foo.lazy/0
Lastly I should note that xref deprecated
and xref unreachable
are included in the compiler warnings, so you you've likely seen these at work even if you didn't know they were there.