Get warning parentheses to remove the ambiguity or change the variable name

warning: variable “make_struct_name_from_bottommost_namespace” does not exist and is being expanded to “make_struct_name_from_bottommost_namespace()”, please use parentheses to remove the ambiguity or change the variable name
lib/traicode_web/views/video_view.ex:3

I am using pheonix 1.3.0
and Elixir 1.5.1

and here is my video_view.ex

defmodule TraicodeWeb.VideoView do
  use TraicodeWeb, :view
  use Rummage.Phoenix.View
end

This warning probably comes from the code which is injected by TraicodeWeb.__using__/1 or Rummage.Phoenix.View.__using__/1.

Please take a look at them and check if there is a make_struct_name_from_bottommost_namespace and make it make_struct_name_from_bottommost_namespace().

1 Like

I still not get your point, and here is my mix.exs

defmodule Traicode.Mixfile do
  use Mix.Project

  def project do
    [
      app: :traicode,
      version: "0.0.1",
      elixir: "~> 1.4",
      elixirc_paths: elixirc_paths(Mix.env),
      compilers: [:phoenix, :gettext] ++ Mix.compilers,
      start_permanent: Mix.env == :prod,
      aliases: aliases(),
      deps: deps()
    ]
  end

  # Configuration for the OTP application.
  #
  # Type `mix help compile.app` for more information.
  def application do
    [
      mod: {Traicode.Application, []},
      extra_applications: [:logger, :runtime_tools]
    ]
  end

  # Specifies which paths to compile per environment.
  defp elixirc_paths(:test), do: ["lib", "test/support"]
  defp elixirc_paths(_),     do: ["lib"]

  # Specifies your project dependencies.
  #
  # Type `mix help deps` for examples and options.
  defp deps do
    [
      {:phoenix, "~> 1.3.0", override: true},
      {:phoenix_pubsub, "~> 1.0"},
      {:phoenix_ecto, "~> 3.2"},
      {:postgrex, ">= 0.0.0"},
      {:phoenix_html, "~> 2.10"},
      {:phoenix_live_reload, "~> 1.0", only: :dev},
      {:gettext, "~> 0.11"},
      {:cowboy, "~> 1.0"},
      {:ueberauth, "~> 0.4"},
      {:ueberauth_google, "~> 0.5"},
      {:ex_machina, "~> 2.0", only: :test},
      {:poison, "~> 3.1"},
      {:httpoison, "~> 0.13"},
      {:number, "~> 0.5.2"},
      {:rummage_phoenix, "~> 1.0.0"}
    ]
  end

  # Aliases are shortcuts or tasks specific to the current project.
  # For example, to create, migrate and run the seeds file at once:
  #
  #     $ mix ecto.setup
  #
  # See the documentation for `Mix` for more info on aliases.
  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
end

You are useing the modules TraicodeWeb and Rummage.Phoenix.View in your TraicodeWeb.VideoView module. use works by expanding the __using__/1-macro of the used module.

In one of the modules you are using, there is a call to the zero-arity function make_struct_name_from_bottommost_namespace but without the parenthesis. You have to find that call in one of those (or probably both) and then add the parenthesis.

Probably you might follow the macro-expansion chain even deeper in those modules __using__/1s!

Also your mix.exs is unrelated.

1 Like

Oh, I’ve taken a closer look now, and in fact your mix.exs is relevant… Please do update your rummage_phoenix to a more current version. It seems as if it was causing the warning.

1 Like