Skip to content

Overly loose typespecs #467

@cdegroot

Description

@cdegroot

I was a bit surprised to hit a bug in our code - we accidentally put a map instead of a keyword list in a Request struct, and that blew up in our staging environment:

2022-11-17T21:57:36.282000+00:00 ip-192-168-0-108/fb9f6b2     (elixir 1.14.1) lib/keyword.ex:1078: Keyword.has_key?(%{"follow_redirect" => true, "max_body_length" => 10240, "max_redirect" => 3, "recv_timeout" => 5000, "timeout" => 5000}, :proxy)
2022-11-17T21:57:36.282000+00:00 ip-192-168-0-108/fb9f6b2     (httpoison 1.8.2) lib/httpoison/base.ex:763: HTTPoison.Base.build_hackney_proxy_options/1

The reason I was surprised is that I assumed that a widely used library like HTTPoison by now would have correct typespecs everywhere, so seeing bd14138 was, well, not what I expected.

Can we batten down the hatches? At the moment, you can feed anything you want to HTTPoison and Dialyzer will not mind; this is the sort of mistake that we have the tools to catch quickly and unless I'm missing something (there's not a lot of detail on that commit) there's really no reason to make everything just any(). I mean, it's probably better to just remove the typespecs at this point altogether...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions