Phoenix mix warning

I’m creating a new phoenix application (my first time) and I am seeing the following warning when I am using mix phoenix,gen.html to build my DB tables:

warning: found quoted keyword "test" but the quotes are not required. Note that keywords are always atoms, even when quoted, and quotes should only be used to introduce keywords with foreign characters in them mix.exs:57

I realize that the warning has nothing to do with the table building but wonder why Phoenix is generating its own ‘bugs’ (to me, a warning is a bug)? Is it because I am using mix phoenix,gen.html instead of mix phx,gen.html?

:wave:

Because the warning comes from elixir 1.7, supposedly (I haven’t seen this warning in elixir 1.6), and phoenix v1.3 was released before elixir 1.7.

The warning is about a keyword list in aliases in your mix.exs. If you check it, you’d see something like

defp aliases do
  [
    # ...
    "test":  #...
  ]
end

there.

The warning says that "test": can safely be replaced with test:.

2 Likes

I’ve removed the quotes from the atom but it still moans about the line… my guess is that it doesn’t like the other quoted “test” either, but I assume that is a command parameter that needs to be quoted?

  defp aliases do
    [
      "ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
      "ecto.reset": ["ecto.drop", "ecto.setup"],
      test: ["ecto.create --quiet", "ecto.migrate", "test"]
    ]
  end
1 Like

No, the other "test" is supposed to be quoted and is not the reason for the warning. I don’t have any warnings once I replace "test": with test:.

1 Like

FYI: The error (warning) eventually went away on its own - after about half a day of ignoring it!?!?

Is there a way to hide the warning without changing it?

Downgrading elixir to some version before the warning was introduced.

Lol, obviously I meant something other than that. But I guess that means it’s not possible. Thanks.

Well, warnings are printed to be acted on, there is currently no way to silence them besides changing the code accordingly or to change to a version of elixir that does not emit the warnings.

And I really hope, there will never be a way to silence the warnings, that would totally defeat their purpose.

I think I should be able to write :"something" without the compiler constantly throwing warning messages at me :joy:

Jokes aside, I don’t believe all warnings are equally important, especially in this case. There should be a way to tell the compiler “I know what I’m doing” so it can suppress specific warnings.

It also shows warnings when using :"..." inside an :ets.match - I don’t think you can write it in any other way there.

Anything wrong with just writing it as :...?

1 Like

Yes, I guess it’s the _ sign?

This works:
Enum.take_random(:ets.match(domain, {:"$1", :"_", :"_"}), 3)

But not if I wite :_
** (SyntaxError) lib/pods/blind_pod.ex:249: unexpected token: ":" (column 44, codepoint U+003A)

No, :_, :__, :., :..., :<, :>, :==, :! are all valid, You are probably talking about :"$" though. That doesn’t work without the quotes.

1 Like

True indeed, it’s the $

1 Like

If it is only possible to create with quotes, it shouldn’t create any warning. If it indeed creates a warning and is not possible without quotes, please file a bug at https://github.com/elixir-lang/elixir.

edit

For me :"$" doesn’t create a warning. I’m on Elixir 1.7.3 compiled and running on OTP 21.

2 Likes