Find duplicate routes in Elixir Phoenix
If you have duplicated routes in your route file like this:
scope "/api", MyAppWeb.Api, as: :api do
pipe_through [:this]
resources "/users", UserController, except: [:new, :edit]
scope
end
scope "/api", MyAppWeb.Api, as: :api do
pipe_through [:that]
resources "/users", UserController, except: [:new, :edit]
end
Then you'll get a warning like this:
warning: this clause cannot match because a previous clause at line 2 always matches
lib/idea_web/router.ex:2
The warning doesn't really let you know which routes are duplicated, but it's really ease to find the duplicated routes by utilizing the uniq
command.
mix phx.routes | sort | uniq -d
The -d
flag for uniq
is duplicates only. -d
only considers similar lines in consecutive order as duplicates, so you need to run it through sort
first.
The output looks like this:
api_user_path DELETE /api/users/:id MyAppWeb.Api.UserController :delete
api_user_path GET /api/users MyAppWeb.Api.UserController :index
api_user_path GET /api/users/:id MyAppWeb.Api.UserController :show
api_user_path PATCH /api/users/:id MyAppWeb.Api.UserController :update
api_user_path POST /api/users MyAppWeb.Api.UserController :create
And those are your duplicate routes!
Tweet