diff --git a/.dialyzer_ignore.exs b/.dialyzer_ignore.exs index e1f15cd9..a0ea79e7 100644 --- a/.dialyzer_ignore.exs +++ b/.dialyzer_ignore.exs @@ -35,9 +35,11 @@ # === Vendored library warnings === - # SnmpKit vendored library - ignore all 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 === @@ -45,5 +47,23 @@ # 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/ + ~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/ ]