elixir-lsp/elixir-ls

Dialyzer does not pick up changes involving remote types

lukaszsamson opened this issue · 1 comments

Environment

  • Elixir & Erlang versions (elixir --version): 1.11, 23.2
  • Editor Plugin/LSP Client name: current master

To reproduce

  1. create Module1 that defines a public type my_type and Module2 uses Module1.my_type e.g. in callback or spec.
  2. introduce a type error involving Module1.my_type
  3. fix the error by changing my_type definition in Module1

Result:

Dialyzer diagnostic persists regardless of error being fixed.

Troubleshooting

The diagnostic goes away after forcing recompilation of Module2

Unfortunately this is due to elixir compiler design choices - remote types do not introduce compile-time dependancy (and since 1.12 runtime dependancy, see elixir-lang/elixir#10406)

No easy way to fix it. When it happens it's best to simply restart the server