A Mix.Task.Compiler that runs clone detection incrementally.
On first run every source file is parsed, fingerprinted, and cached. On subsequent compilations only files that changed (by mtime) are re-analyzed; the rest is loaded from the cache.
Setup
Add :ex_dna to the compilers list in your mix.exs:
def project do
[compilers: Mix.compilers() ++ [:ex_dna]]
endThe cache is stored in .ex_dna_cache and should be added to .gitignore.