(UndefinedFunctionError) function Phoenix.LiveView.HTMLFormatter.format/2 is undefined

I’m posting this as a reference as I couldn’t find a post related to this error message.

This issue can arise in umbrella projects that have been generated a long time ago where the LiveView HEEx formatter didn’t exist yet and you want to get up-to-date. When you try to define the Phoenix.LiveView.HTMLFormatter as a plugin module (only) in the apps/myapp_web/.formatter.exs file you may get the following error:

** (UndefinedFunctionError) function Phoenix.LiveView.HTMLFormatter.format/2 is undefined (module Phoenix.LiveView.HTMLFormatter is not available)
    Phoenix.LiveView.HTMLFormatter.format("<img src=\"/images/toggle_on.svg\" />\n", [file: "src/myapp/apps/myapp_web/lib/myapp_web/views/admin/helpers.ex", line: 11, sigil: :H, modifiers: [], opening_delimiter: "\"\"\"", import_deps: [:ecto, :ecto_sql, :phoenix, :surface, :assertions], plugins: [Phoenix.LiveView.HTMLFormatter], inputs: ["*.{heex,ex,exs}", "{lib,test}/**/*.{heex,ex,exs}"]])
    (elixir 1.14.2) lib/code/formatter.ex:1348: Code.Formatter.maybe_sigil_to_algebra/4
    (elixir 1.14.2) lib/code/formatter.ex:487: Code.Formatter.quoted_to_algebra/3
    (elixir 1.14.2) lib/code/formatter.ex:576: anonymous fn/3 in Code.Formatter.block_args_to_algebra/4
    (elixir 1.14.2) lib/code/formatter.ex:1960: Code.Formatter.each_quoted_to_algebra_with_comments/6
    (elixir 1.14.2) lib/code/formatter.ex:1938: Code.Formatter.quoted_to_algebra_with_comments/6
    (elixir 1.14.2) lib/code/formatter.ex:581: Code.Formatter.block_args_to_algebra/4
    (elixir 1.14.2) lib/code/formatter.ex:1858: Code.Formatter.clauses_to_algebra/4

I noticed that I sometimes didn’t get this error when I ran mix format the first time, but then every subsequent time.

Solution

Make sure that the same module (plugins: [Phoenix.LiveView.HTMLFormatter]) is defined in the root .formatter.exs file as well. It’s mentioned in the docs but sometimes you even overlook big info sections like that or misunderstand them.

Also ensure that you have at least {:phoenix_live_view, "~> 0.17.8"} defined. It’s the first version that makes the formatter module available.

1 Like

FWIW, I had to uninstall and reinstall phoenix_live_view

mix deps.clean phoenix_live_view
mix deps.get