warmwaffles
We have a rather large code base ~2200 elixir files and growing. On my nice Ryzen 9, it takes ~47 seconds to analyze the generated PLT files. Our config looks like this:
defp dialyzer(env) do
[
plt_add_apps: [:mix, :ex_unit],
flags: ~w(
error_handling
extra_return
missing_return
)a,
plt_file: {:no_warn, "priv/plts/dialyzer-#{env}.plt"},
list_unused_filters: true
]
end
In our CI environment, dialyzer is taking ~2 minutes. I blame the underlying server equipment here, but locally this is painfully slow to run and to build the PLTs take even longer than our test suite does to run. (14,000+ tests ~100 seconds).
What are some strategies that others have employed to speed this up or help the dialyzer along? One mentioned was to avoid opaque types.
Trending in Discussions
As the title says, please share what you’ve been up to with Elixir. Whether that’s been learning it, looking into it, making stuff with i...
New
Hey there,
It’s been more than a year since we started using LiveView as our main UI library and building a whole library of UI componen...
New
I am happy to introduce the very α version of the new programming language compiled to BEAM.
Welcome Cure.
It has literally three kille...
New
Quite interesting article Google brought me. Didn’t find any mentions about it here.
What do you think in general? Would you use togethe...
New
Hi everyone!
The first release candidate for the Expert language server project is now available!
We’ve published a press release detai...
New
Since we have deprecated our Erlang sections (as we have dedicated Erlang Forums now) let’s add this thread for those who’d like to post ...
New
What IDE or editor are you using for Elixir development?
Personally, I use Zed, and I really like it, but sometimes I wish there were a ...
New
Other Trending Topics
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
Hi there! We created Gust: A task orchestrator inspired by Airflow.
For those who have never heard about Aiflow, it’s a Python-based wor...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself.
My main conc...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixirconf-us
- #ai
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #hex
- #security











Showing Posts 1 to 4- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
christhekeele
You can build just the PLTs without doing analysis via
dialyzer --plt. I work this into my cache system (varies by CI provider) with a cache key based on elixir + erlang versions and a hash ofmix.lock; so PLTs only build when any of those change. This amortizes your PLT build times over just commits that would require rebuilding PLTs by busting the cache.Generally,
Steps 1 and 3 are fast and the happy path. In practice this looks like (for Github-flavored CI):
warmwaffles
Yea we definitely cache the PLTs prior, but the cache is busted if mix lock is changed.
christhekeele
Ah i see. I have no experience trying to accelerate the generation of PLTs beyond caching, as that’s always been sufficient for the projects I’ve worked on. Does your
mix.lockchange often enough for this to remain a problem day-to-day?warmwaffles
Unfortunately we have ~181 dependencies and we do bump deps frequently. I should also mention that the caching also is calculated based on tool-version, all the config files (we have conditional compilation yay), and this mix lock.