Getting compile errors after adding ex_doc dependency

I added the ex_doc dependency to my mix.exs, did a mix deps.get, and mix.compile and I’m getting a compile error. Am I missing something here?

% cat mix.exs
defmodule Issues.MixProject do
  use Mix.Project

  def project do
    [
      app: :issues,
      escript: escript_config(),
      version: "0.1.0",
      elixir: "~> 1.7",
      start_permanent: Mix.env() == :prod,
      deps: deps()
    ]
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
      extra_applications: [:logger]
    ]
  end

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [
      {:httpoison, "~> 1.4.0"},
      {:poison, "~> 4.0"},
      {:ex_doc, "~> 0.19.0"}
    ]
  end

  defp escript_config do
    [
      main_module: Issues.CLI
    ]
  end
end

% mix deps.get
Resolving Hex dependencies...
Dependency resolution completed:
Unchanged:
  certifi 2.4.2
  earmark 1.3.0
  ex_doc 0.19.1
  hackney 1.14.3
  httpoison 1.4.0
  idna 6.0.0
  makeup 0.5.5
  makeup_elixir 0.10.0
  metrics 1.0.1
  mimerl 1.0.2
  nimble_parsec 0.5.0
  parse_trans 3.3.0
  poison 4.0.1
  ssl_verify_fun 1.1.4
  unicode_util_compat 0.4.1
* Getting httpoison (Hex package)
* Getting poison (Hex package)
* Getting ex_doc (Hex package)
* Getting earmark (Hex package)
* Getting makeup_elixir (Hex package)
* Getting makeup (Hex package)
* Getting nimble_parsec (Hex package)
* Getting hackney (Hex package)
* Getting certifi (Hex package)
* Getting idna (Hex package)
* Getting metrics (Hex package)
* Getting mimerl (Hex package)
* Getting ssl_verify_fun (Hex package)
* Getting unicode_util_compat (Hex package)
* Getting parse_trans (Hex package)

% mix deps.compile
===> Compiling parse_trans
===> Compiling mimerl
==> nimble_parsec
Compiling 4 files (.ex)
Generated nimble_parsec app
==> makeup
Compiling 43 files (.ex)

== Compilation error in file lib/makeup/lexer/combinators.ex ==
** (CompileError) lib/makeup/lexer/combinators.ex:116: undefined function repeat_until/2
    (stdlib) lists.erl:1338: :lists.foreach/2
    (stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
could not compile dependency :makeup, "mix compile" failed. You can recompile this dependency with "mix deps.compile makeup", update it with "mix deps.update makeup" or clean it with "mix deps.clean makeup"

That’s a know issue we’re working on fixing, here’s a workaround before there’s a new makeup version: https://github.com/elixir-lang/ex_doc/issues/938#issuecomment-446551764

1 Like

I pinned the nimble_parsec version to 0.4.0, as the workaround suggested, and it worked.

{:nimble_parsec, “~> 0.4.0”, only: :dev, override: true}

Thanks, much!

2 Likes