Friday 23rd September 2022
Local Packages
Updated perl-Type-Tiny to 2.000000:
Back Compat
If none of a multisig's alternative sigs match the parameter list, ${^TYPE_PARAMS_MULTISIG} will explicitly be set to undef, instead of being left as-is
The Eval::TypeTiny::HAS_LEXICAL_VARS constant no longer exists; it was deprecated in Type-Tiny-1.004000 (2018-07-27)
More sensible error message trying to import a type constraint using -declare outside a type library
Bug Fixes
Types::Common was not correctly handling the -sigs export tag
Setting a default for a slurpy parameter in Type::Params now warns and ignores the default instead of failing to compile because of a syntax error
What was supposed to be a warning for slurpy+default in Type::Params was throwing an exception: corrected to be a warning
Documentation
Document usage with Class::Plain
Updated Type::Tiny::Manual to cover new features
Fix misspelling of 'GitHub' in documentation
Updated the SYNOPSIS for Types::Standard and Type::Tiny
Improvements to Type::Params documentation
Update NEWS
Minor documentation clarifications around new constructor methods for Type::Tiny subclasses
Document in Type::Tie that Type::Tie is implicitly loaded when you tie a variable to a Type::Tiny type constraint (it was already documented in the manual)
Document the Type::Tie::BASE 'type' method
- Removed stub pod from a bunch of internal modules; they're internal, so nobody should be expecting pod
Packaging
Add Class::XSAccessor to Type::Tiny's recommendations
Other
%Error::TypeTiny::CarpInternal is now an alias for %Carp::CarpInternal
Added: Type::Tiny 'type_default' method
Added: Type::Tiny overloads '/'
Added: Types::Common module
The Type::Params API has had a major overhaul, introducing 'signature' and 'signature_for' functions; the 'compile', 'compile_named', 'compile_named_oo', 'validate', 'validate_named', 'wrap_subs', and 'wrap_methods' functions are now considered the legacy API (there are no plans to drop support for the legacy API in the foreseeable future)
Updated: dropping support for Perl 5.6.1 (which was released in April 2001), 5.6.2 (November 2003), and Perl 5.8.0 (July 2002); Type::Tiny now requires at least Perl 5.8.1
Major simplifications of Type::Library internals
Updated: Require Exporter::Tiny 1.004001+ (previously required Exporter::Tiny 1.000000)
Types::Common now also extends Types::TypeTiny
Minor bugfixes and improvements to slurpy handling in Type::Params
Added: move two helper subs (set_subname and type_to_coderef) out of Type::Library and into Eval::TypeTiny, clean them up, and document them as part of the API
Added: Type::Tiny now has an 'exportables' method that provides a list of functions that the type can export; type libraries now defer to this when deciding what they can export
Added: Type::Tiny::Class is now an exporter
Added: Type::Tiny::Duck is now an exporter
Added: Type::Tiny::Enum is now an exporter
Added: Type::Tiny::Role is now an exporter
Type::Tiny::{Class,Duck,Enum,Role} subclass Exporter::Tiny instead of handling exports manually
Added: Type::Tiny::Enum has an is_word_safe method that indicates whether all values in the enumeration are 'words' (i.e. contain only word characters)
- Added: Word-safe enumerations export constants for each value
The NICE_PROTOTYPES constant has been moved from Type::Library to Eval::TypeTiny, though a copy of it is still available in Type::Library for backwards compatibility
The intersection of two Type::Tiny::Enum objects is now a Type::Tiny::Enum instead of a Type::Tiny::Intersection
The union of two Type::Tiny::Enum objects is now a Type::Tiny::Enum instead of a Type::Tiny::Union
Type::Params will call default coderefs as a method for signatures where method => 1
The functionality provided by Type::Params::multisig() is now provided in the Type::Params v2 API (and is slightly more functional!)
Get the 'multiple' option working with the 'signature_for' function from Type::Params
Improved test cases and miscellaneous small bugfixes for slurpy parameters in Type::Params
- Minor refactoring, mostly to make things more easily testable
Added: Type::Tiny now has an exportables_by_tag method
Added: Type::Tiny::_DeclaredType is now a separate module (it was previously defined inline in Type/Library.pm)
Eval::TypeTiny::type_to_coderef() can now handle being passed undef as a type constraint and will create a Type::Tiny::_DeclaredType object to wrap instead
- If a type library has been made immutable, you can no longer add new types and coercions to it
Type::Params 'signature_for' will now delay most of the signature compilation until the function is called for the first time, like 'wrap_subs'/'wrap_methods' used to do; it still does enough up-front to detect some common errors in signatures
Various Type::Library clean-ups
Added: Types::Common::String now has a DelimitedStr type
- Improve cache key generation for parameterized types
- Minor improvements to the default name generator, used to generate the display_name for parameterized type constraints
Eval::TypeTiny::CodeAccumulator now supports $coderef->compile(alias => 1)
If the 'ws' parameter is set to true in parameterized DelimitedStr type constraints, leading and trailing whitespace will now be permitted
Non-parameterized DelimitedStr now has a coercion from ArrayRef[Str]
The ${^TYPE_PARAMS_MULTISIG} magic global variable is now called ${^_TYPE_PARAMS_MULTISIG}; the old name will still be supported for at least six months after the next stable release
Added: Bundle Type::Tie, which was previously in a separate distribution on the CPAN
- Adding a type constraint to a type library will now also add it to the library's type registry (even though this registry is unlikely to be used)
Rewrite much of Type::Tie to no longer use inside-out objects and avoid a dependency on Hash::Util::FieldHash or alternative implementations of fieldhashes
Type::Parser's internal packages now have version numbers
Type::Tie now supports variables being cloned with Clone::clone(); it already supported Storable::dclone()
Type::Tie will now try to load Class::XSAccessor::Array for a speed-up
Using Type::Utils to declare a named type will now automatically add the type to the caller's type registry
Type::Params signature_for will respect inheritance when looking for methods to wrap, when the 'method' option is true
Test Suite
- More tests
Tests for the 'type_default' of all built-in types
Better tests for 'strictness' option in Type::Params
Improved tests for slurpy handling in Type::Params
The internal module Type::Params::Signature now has some tests of its own
Add versions of tests for the new Type::Params v2 API that don't rely on Perl 5.20 features
More tests for Type::Tiny::{Class,Duck,Enum,Role} exporting
Improved test cases; now 100% coverage on coveralls.io
Another test for '-base'
Bundle a (renamed) copy of Type::Nano in the test suite for some tests, combining Type::Nano and Type::Tiny type constraints, and converting Type::Nano to Type::Tiny
Improved test cases for Type::Tie with an aim at 100% coverage
Test usage with Class::Plain
`