Warning: the Inspect protocol has already been consolidated... (after adding Ash to project)

I’m relatively new to Ash – that said, it seems there are warnings popping up stemming from Ash. After adding a couple of Ash modules, I’m getting:

warning: the Inspect protocol has already been consolidated, an implementation for Walker.Sprint.ActivityStereotype has no effect. If you want to implement protocols after compilation or during tests, check the "Consolidation" section in the Protocol module documentation
  lib/walker/sprint/resources/activity_stereotype.ex:1: Walker.Sprint.ActivityStereotype (module)

warning: the Inspect protocol has already been consolidated, an implementation for Walker.Sprint.ActivityStereotype has no effect. If you want to implement protocols after compilation or during tests, check the "Consolidation" section in the Protocol module documentation
  lib/walker/sprint/resources/activity_stereotype.ex:1: Walker.Sprint.ActivityStereotype (module)

Compiled lib/walker/sprint/resources/activity_stereotype.ex
warning: the Inspect protocol has already been consolidated, an implementation for Walker.Sprint.Activity has no effect. If you want to implement protocols after compilation or during tests, check the "Consolidation" section in the Protocol module documentation
  lib/walker/sprint/resources/activity.ex:1

warning: the Inspect protocol has already been consolidated, an implementation for Walker.Sprint.Activity has no effect. If you want to implement protocols after compilation or during tests, check the "Consolidation" section in the Protocol module documentation
  lib/walker/sprint/resources/activity.ex:1

After a bit of research, I’m stumped as to what it means, and what to do about it. One pair of warnings for every new module (entity) that I’m creating. Which is leading to a lot of warnings. Anyone have a clue how to curtail these things?

I’m using Elixir 1.15.7 and Ash 2.17.4.

I think you can resolve this in dev by not consolidating protocols in dev mode, only in test and production.

Thanks @zachdaniel … Did a little digging and found the Protocol docs mentions that consolidation isn’t used in development (because code reloading), but does happen during compilation. You are right, adding this to the subproject:

# mix.exs

def project do
  ...
  consolidate_protocols: Mix.env() != :dev
  ...
end

And then blowing away _build and .elixir_ls followed by a clean compile appears to have made the warnings go away. At least in dev.

2 Likes