belaustegui
"The Inspect protocol has already been consolidated" for Ecto schema with redacted field
I’ve recently started a new Phoenix project using Elixir 1.11, Phoenix 1.5 and Ecto 3.5.
Everything runs smoothly but there is a recurrent warning in ElixirLS which I can not fix. The warning says:
the Inspect protocol has already been consolidated, an implementation for MyApp.User has no effect. If you want to implement protocols after compilation or during tests, check the “Consolidation” section in the Protocol module documentation
The warning is highlighted in the Ecto schema declaration:
The thing is: the module does not implement the Inspect protocol. I know I can disable protocol consolidation in development to make this warning disappear, but I would like to know what is causing it. It only happens in this schema and not in the resto of Ecto schemas I have implemented.
EDIT
I’ve dived into the Ecto.Schema.schema() code and found this code which I belive is causing the warning:
if redacted_fields != [] and not List.keymember?(@derive, Inspect, 0) and
@ecto_derive_inspect_for_redacted_fields do
@derive {Inspect, except: @ecto_redact_fields}
end
My schema has a field :password, :string, virtual: true, redact: true which triggers this code and derives the Inspect protocol for my schema.
So, now that I know where this comes from. Is there a way to fix this warning? Should I report it as a bug in Ecto?
Most Liked
zac
I’m running into the same issue with a simple (demo) Ash Framework project. As soon as I added more than the basic persistence, started seeing:
warning: the Inspect protocol has already been consolidated, an implementation for Helpdesk.Support.Ticket has no effect. If you want to implement protocols after compilation or during tests, check the "Consolidation" section in the Protocol module documentation
lib/helpdesk/support/resources/ticket.ex:1
The code is pretty simple:
defmodule Helpdesk.Support.Ticket do
use Ash.Resource
actions do
defaults [:create, :read, :update, :destroy]
create :open do
accept [:subject]
end
end
attributes do
uuid_primary_key :id
attribute :subject, :string do
allow_nil? false
end
attribute :status, :atom do
constraints [one_of: [:open, :closed]]
default :open
allow_nil? false
end
end
end
lukaszsamson
ElixirLS bug is already fixed on master
i-n-g-m-a-r
Was this fixed?
Probably it was, the bug seems to have returned.
belaustegui
I’ve opened an issue in Ecto repository with an example project that can be used to reproduce this warning.
belaustegui
The bug has been resolved in Phoenix, which does not report the warning anymore. ElixirLS is not fixed yet and keeps showing the warning just like before.
This is the issue tracking that bug in the ElixirLS repository.









