(FunctionClauseError) no function clause matching in anonymous fn/1 in EEx.Compiler.tokenize/6

My project works under Phoenix1.6.6. After upgraded to 1.6.12, It compiled error, and I cannot understand the compilation result information, as followed:

== Compilation error in file lib/linlang_web/views/user_session_view.ex ==
** (FunctionClauseError) no function clause matching in anonymous fn/1 in EEx.Compiler.tokenize/6

    The following arguments were given to anonymous fn/1 in EEx.Compiler.tokenize/6:

        # 1
        {{1, 71}, [102, 111, 117, 110, 100, 32, 113, 117, 111, 116, 101, 100, 32, 107, 101, 121, 119, 111, 114, 100, 32, 34, 'social', 34, 32, 98, 117, 116, 32, 116, 104, 101, 32, 113, 117, 111, 116, 101, 115, 32, 97, 114, 101, 32, 110, 111, 116, 32, ...]}

    (eex 1.14.0) lib/eex/compiler.ex:68: anonymous fn/1 in EEx.Compiler.tokenize/6
    (elixir 1.14.0) lib/enum.ex:975: Enum."-each/2-lists^foreach/1-0-"/2
    (eex 1.14.0) lib/eex/compiler.ex:68: EEx.Compiler.tokenize/6
    (eex 1.14.0) lib/eex.ex:218: EEx.compile_string/2
    (phoenix_view 1.1.2) lib/phoenix/template.ex:419: Phoenix.Template.compile/3
    (phoenix_view 1.1.2) lib/phoenix/template.ex:197: anonymous fn/4 in Phoenix.Template."MACRO-__before_compile__"/2
    (elixir 1.14.0) lib/enum.ex:2468: Enum."-reduce/3-lists^foldl/2-0-"/3
    (phoenix_view 1.1.2) expanding macro: Phoenix.Template.__before_compile__/1

And in the user_session_view.ex file is just:

defmodule LinlangWeb.UserSessionView do
  use LinlangWeb, :view
end

Can anyone enlight me?

Thanks!

Can you please try to reproduce it in an app you can share?

Hi

I finally opened my project with VS Code, an found this:
截屏2022-09-16 08.21.45
and this:

VS Code showed something wrong with the file user_session_view.ex, but did not say why.
So I rename the filename to user_sessions_view.ex, and module name to User.Sessions.View, all plus ‘s’.
Then I pass the compilation, and project can run. Although with some error with not found module “UserSessionView”

So, I guess the reason maybe is the UserSessionView was long before created, and did not use phx.gen.auth
to generated? Not sure.

Thank you very much. If there is any better solution, pls let me know. :handshake:

Hi,
I finally found the error.
One of the template file contains some code like this:

Routes.user_session_path(@conn, :auth_phone_number, %{"social":  @conn.params["social"], "phone": @conn.params["phone"]}

And I fixed to :

Routes.user_session_path(@conn, :auth_phone_number, %{"social" =>  @conn.params["social"], "phone" => @conn.params["phone"]}

Everything is ok.

I wonder why the previous phx version compile the code success.

Anyway thank you very much. :slight_smile:

1 Like