v0.11.0
Wooh, this is a big release!
Most important features:
- We now support all of Elixir's builtin basic types!
- We now support all of the remote types of the Elixir standard library!
- Support for most of the map-type syntactic sugars.
- An optional Credo check to enforce that all your functions have a spec.
Full changelog
Additions
- Support for fancier map syntaxes:
%{required(key_type) => value_type}
Maps with a single kind of required key-value type.%{optional(key_type) => value_type}
Maps with a single kind of optional key-value type.%{:some => a(), :fixed => b(), :keys => c(), optional(atom()) => any()}
Maps with any number of fixed keys and a single optional key-value type.- TypeCheck now supports nearly all kinds of map types that see use. Archaic combinations of optional and required are not supported, but also not very useful types in practice.
- Because of this, the inspection of the builtin type
map(key, value)
has been changed to look the same as an optional map. This is a minor backwards-incompatible change.
- Desugaring
%{}
has changed from 'any map' to 'the empty map' in line with Elixir's Typespecs. This is a minor backwards-incompatible change. - Support for the builtin types
port()
,reference()
and (based on these)identifier()
. - Support for the builtin type
struct()
. - Support for the builtin type
timeout()
. - Support for the builtin type
nonempty_charlist()
andmaybe_improper_list
and (based on these)iolist()
andiodata()
. - Adding types depending on these builtins to the default type overrides. We now support all modules of the full standard library!
TypeCheck.Credo.Check.Readability.Specs
: an opt-in alternative Credo check which will check whether all functions have either a@spec!
or 'normal'@spec
. (Fixes #102).
Fixes
- The
TypeCheck.Builtin
module is now actually spectested itself. Some consistency bugs were found and solved as a result.