Help with Dialyzer and nowarn_function

Hey folks!

I’ve got a branch in Absinthe that conditionally uses the :persisten_term module if it’s available. Unfortunately this is causing me issues with dialyzer, for reasons I can’t quite sort out. I’d like to do one of two things:

  1. Figure out why dialyzer things :persistent_term.put/2 is unavailable on OTP 21.2. This would be the best option.
  2. If that fails, mark the function as nowarn. I’ve tried this, but I can’t seem to get the invocation correct.

Branch: https://github.com/absinthe-graphql/absinthe/pull/895/files
Failing Travis job: https://travis-ci.org/github/absinthe-graphql/absinthe/jobs/668979055?utm_medium=notification&utm_source=github_status
Line where I try to tell dialyzer to ignore stuff: https://github.com/absinthe-graphql/absinthe/pull/895/files#diff-84866da0b679965d8a1826c4dc1665e6R63

Sometime in the past, for reasons I don’t recall (but I think i was heading down the same path as you) I added the following to my .dialyzer_ignore_warnings fie which seemed to quiet things down. Hope it helps make some progress.

:0: Unknown function persistent_term:get/2
:0: Unknown function persistent_term:put/2

I think this may also have been because of the @dialyzer issue you are having - i think I had the same but can’t fully recall.

2 Likes

Hi @kip thanks for the suggestion. I added a file with those lines to that file and at first it didn’t work, but then switched it to using the Elixir formatted documented by dialyxir. This worked!

Commit: https://github.com/absinthe-graphql/absinthe/pull/895/commits/445e662ca92b789c23555fe9dcb3b7307f340756

Dialyxir format: https://github.com/jeremyjh/dialyxir#elixir-term-format

I’d still like to sort out why dialyzer doesn’t think persistent_term.put exists for that version of Erlang though.

1 Like

We’ve now hit this issue in OpenTelemetry https://github.com/open-telemetry/opentelemetry-erlang-api/pull/82

But what is extra weird is that dialyzer has been working fine, no warnings about persistent_term:put/2. It is only now that Elixir’s dialyxer task has been added that its use of dialyzer warns about the function…

1 Like