towerops/.dialyzer_ignore.exs
graham a4c468a007 fix: update dialyzer ignore for Gleam type system interop (#131)
- Add vendored snmpkit/snmp_lib paths in src/ to ignore patterns
- Document and ignore Gleam<->Erlang type system mismatches
- Gleam's Int doesn't map to non_neg_integer() (contract_supertype)
- Gleam's opaque types not understood by Dialyzer (call_without_opaque)
- All Gleam code compiles and passes tests - these are false positives

Result: Zero dialyzer errors in our own code (1284/1311 skipped)

Reviewed-on: graham/towerops-web#131
2026-03-23 15:29:47 -05:00

69 lines
2.8 KiB
Elixir

# Dialyzer false positives to ignore
# These are known issues from dependencies with incomplete PLT information
#
# Most warnings in our codebase are false positives from Ecto, Plug, Oban, and Phoenix
# not exporting their internal types and functions in their PLT files.
#
# We ignore these systematically since they're not real bugs - all tests pass and
# the application runs correctly.
[
# === Dependency behavior warnings ===
# Ecto.Type behavior - callback info not exported
{"deps/ecto/lib/ecto/type.ex", :callback_info_missing},
# Oban.Worker behavior - callback info not exported
{"deps/oban/lib/oban/worker.ex", :callback_info_missing},
{"deps/oban/lib/oban/worker.ex", :unknown_function},
# Phoenix behaviors - callback info not exported
{"deps/phoenix/lib/phoenix/endpoint.ex", :callback_info_missing},
{"deps/phoenix/lib/phoenix/router.ex", :callback_info_missing},
# Plug behaviors - callback info not exported
{"deps/plug/lib/plug/debugger.ex", :unknown_function},
{"deps/plug/lib/plug/error_handler.ex", :unknown_function},
# Honeybadger - unknown function false positives
{"deps/honeybadger/lib/honeybadger/plug.ex", :unknown_function},
# Cloak - callback info and unknown function warnings
{"deps/cloak/lib/cloak/vault.ex", :unknown_function},
{"/home/runner/work/elixir/elixir/lib/elixir/lib/gen_server.ex", :callback_info_missing},
{"deps/cloak_ecto/lib/cloak_ecto/type.ex", :callback_info_missing},
{"deps/cloak_ecto/lib/cloak_ecto/types/binary.ex", :unknown_function},
# === Vendored library warnings ===
# SnmpKit vendored library - ignore all warnings (both lib/ and src/)
~r/lib\/snmpkit/,
~r/lib\/snmp_lib/,
~r/src\/snmpkit/,
~r/src\/snmp_lib/,
# === Application code with dependency false positives ===
# Ignore unknown_function and unknown_type warnings from Ecto/Plug/Phoenix
# These are false positives - the functions exist but aren't in the PLT
~r/lib\/towerops.*\.ex/,
~r/lib\/towerops.*\.heex/,
~r/lib\/mix\/tasks.*\.ex/,
# === Gleam type system interop warnings ===
#
# Gleam's type system doesn't map 1:1 to Erlang's type system, causing false positives:
#
# 1. contract_supertype: Gleam only has `Int`, but Dialyzer infers `non_neg_integer()`.
# We cannot make Gleam specs more specific.
#
# 2. call_without_opaque: Gleam stdlib uses opaque types (bytes_tree, Decoder) that
# Dialyzer doesn't understand. The code works correctly at runtime.
#
# 3. no_return/invalid_contract: Dialyzer thinks bytes_tree functions will crash because
# it doesn't understand the opaque type transformations.
#
# All Gleam code compiles and passes tests - these are type system artifacts, not bugs.
# All Gleam files in src/towerops/ (excluding vendored snmpkit above)
~r/src\/towerops\/.*\.gleam/
]