Dialyxir warning about unknown functions

I added dialyxir in my umbrella application root .its rc version

          {:dialyxir, "~> 1.0.0-rc.4", only: [:dev], runtime: false}

And in my project list i added plt like this:

      dialyzer: [plt_add_deps: :transitive]

When I run mix dialyzer . It gives me lots and lots of warnings about unknown functions and plugs and other stuff:

        Starting Dialyzer
          [
           check_plt: false,
            init_plt: '/Volumes/Data/Work/haitracker-be/_build/dev/dialyxir_erlang-21.0.3_elixir-1.7.4_deps- 
           dev.plt',
          files_rec: ['/Volumes/Data/Work/haitracker-be/_build/dev/lib/api/ebin',
         '/Volumes/Data/Work/haitracker-be/_build/dev/lib/admin_api/ebin',
          '/Volumes/Data/Work/haitracker-be/_build/dev/lib/core/ebin',
        '/Volumes/Data/Work/haitracker-be/_build/dev/lib/utils/ebin',
        '/Volumes/Data/Work/haitracker-be/_build/dev/lib/data/ebin',
       '/Volumes/Data/Work/haitracker-be/apps/fat_ecto/_build/dev/lib/fat_ecto/ebin'],
       warnings: [:unknown]
      ]
    Total errors: 552, Skipped: 0, Unnecessary Skips: 0
      done in 0m10.83s
     :0:unknown_function
     Function Access.get/3 does not exist.
      ________________________________________________________________________________
     :0:unknown_function
     Function Agent.get/2 does not exist.
      ________________________________________________________________________________
     :0:unknown_function
     Function Agent.start_link/2 does not exist.
      ________________________________________________________________________________
     :0:unknown_function
     Function Agent.stop/1 does not exist.
     ________________________________________________________________________________
    :0:unknown_function
     Function Application.ensure_all_started/1 does not exist.
     ________________________________________________________________________________
    :0:unknown_function
     Function Application.fetch_env!/2 does not exist.
     ________________________________________________________________________________
    :0:unknown_function
    Function Application.get_env/2 does not exist.
    ________________________________________________________________________________
    :0:unknown_function
    `Preformatted text`Function Application.get_env/3 does not exist.
    ________________________________________________________________________________
    :0:unknown_function
    Function Application.spec/1 does not exist.
    ________________________________________________________________________________
    :0:unknown_function
    Function ArgumentError.exception/1 does not exist.
    ________________________________________
    :0:unknown_function
    Function Ecto.assoc/2 does not exist.
    ________________________________________________________________________________

   apps/admin_api/lib/controllers/room_admin_controller.ex:1:callback_info_missing
   Callback info about the Plug behaviour is not available.
   ________________________________________________________________________________
   apps/admin_api/lib/controllers/room_unit_admin_controller.ex:1:callback_info_missing
   Callback info about the Plug behaviour is not available.
  ________________________________________________________________________________
   apps/admin_api/lib/controllers/unit_admin_controller.ex:1:callback_info_missing
   Callback info about the Plug behaviour is not available.
  ________________________________________________________________________________
   apps/admin_api/lib/controllers/user_admin_controller.ex:1:callback_info_missing
   Callback info about the Plug behaviour is not available.
 ________________________________________________________________________________
   apps/admin_api/lib/gettext.ex:1:callback_info_missing
   Callback info about the Gettext.Backend behaviour is not available.
________________________________________________________________________________

These are the few from the complete log.

There are errors about callback missing. What does it expect for a callback?

I tried changing dialyzer: [plt_add_deps: :project]. But nothing seems to be working.

Any helps suggestions will be much appreciated.

Thanks

Hi, leave out the plt_add_deps entirely. The default mode, app_tree uses the OTP dependency tree which is the preferred method now. I’m going to deprecate the mix dependency modes. That said, I have a feeling there is another issue. Can you include the full output? There should be a section before where yours starts that list all the OTP apps it is adding to the PLT.

Thanks for your reply. Here is the section which list apps:

 Finding suitable PLTs
  Checking PLT...
[:asn1, :bamboo, :base64url, :bcrypt_elixir, :benchee, :benchee_csv, :certifi, :combine, :comeonin, :compiler, 
 :connection, :core, :cors_plug, :cowboy, :cowlib, :crypto, :csv, :data, :db_connection, :decimal, :deep_merge, 
 :earmark, :ecto, :ecto_sql, :eex, :elixir, :ex_machina, :ex_seeds, :faker, :fat_ecto, :file_system, :gettext, 
 :guardian, :hackney, :idna, :inets, :jason, :jose, :kernel, :logger, :metrics, :mime, :mimerl, :parallel_stream, 
 :phoenix, :phoenix_ecto, :phoenix_html, :phoenix_live_reload, :phoenix_pubsub, :phoenix_swagger, ...]
 Looking up modules in dialyxir_erlang-21.0.3_elixir-1.7.4_deps-dev.plt
 Finding applications for dialyxir_erlang-21.0.3_elixir-1.7.4_deps-dev.plt
 Finding modules for dialyxir_erlang-21.0.3_elixir-1.7.4_deps-dev.plt
 Checking 184 modules in dialyxir_erlang-21.0.3_elixir-1.7.4_deps-dev.plt
 Adding 1759 modules to dialyxir_erlang-21.0.3_elixir-1.7.4_deps-dev.plt

yes you are right there are errors related to asdf.

  :dialyzer.run error: Analysis failed with error:
 Could not scan the following file(s):
 ould not get Core Erlang code for: /Users/shadow/.asdf/installs/elixir/1.7/lib/elixir/ebin/elixir_parser.beam
 Recompile with +debug_info or analyze starting from source code  Could not get Core Erlang code for: 
 /Users/shadow/.asdf/installs/elixir/1.7/lib/logger/ebin/Elixir.Logger.WatcherSupervisor.beam
  Recompile with +debug_info or analyze starting from source code  Could not get Core Erlang code for: 
 /Users/shadow/.asdf/installs/elixir/1.7/lib/logger/ebin/Elixir.Logger.Watcher.beam
 Recompile with +debug_info or analyze starting from source code  Could not get Core Erlang code for: 
/Users/shadow/.asdf/installs/elixir/1.7/lib/logger/ebin/Elixir.Logger.beam
 Recompile with +debug_info or analyze starting from source code  Could not get Core Erlang code for: 
/Users/shadow/.asdf/installs/elixir/1.7/lib/logger/ebin/Elixir.Logger.Utils.beam
Recompile with +debug_info or analyze starting from source code  Could not get Core Erlang code for: 
/Users/shadow/.asdf/installs/elixir/1.7/lib/logger/ebin/Elixir.Logger.Translator.beam

This is a known issue, the ASDF builds for 1.7 are done with OTP 20 by default, you are using 21. So you need to specify in the asdf command line or your .tool-versions elixir 1.7.4-otp-21

4 Likes

This looks as if you were using a pretty recent erlang but a prebuilt elixir. Please use a prebuilt elixir that matches your erlang version asdf install elixir 1.7.x-otp-2y IIRC, of course you have to replace x and y with the proper values…

The reason for this problems is a change of how dialyzer stored its meta data in the BEAM file since OTP 20. It has been discussed a couple of times in the forum.

4 Likes