in reply to Function::Parameters, Types::Standard, and Perl::Critic

At least for the first part of your question, I guess it's because PPI, which Perl::Critic uses internally, no longer recognizes the code as a sub and so those policies don't apply.

use warnings; use strict; use PPI; use PPI::Dumper; my $Document = PPI::Document->new(\<<'END'); use Function::Parameters; use Types::Standard qw( Num ); fun foo (Num $x) { $x + 1 } END my $Dumper = PPI::Dumper->new( $Document ); $Dumper->print; __END__ PPI::Document PPI::Statement::Include PPI::Token::Word 'use' PPI::Token::Whitespace ' ' PPI::Token::Word 'Function::Parameters' PPI::Token::Structure ';' PPI::Token::Whitespace '\n' PPI::Statement::Include PPI::Token::Word 'use' PPI::Token::Whitespace ' ' PPI::Token::Word 'Types::Standard' PPI::Token::Whitespace ' ' PPI::Token::QuoteLike::Words 'qw( Num )' PPI::Token::Structure ';' PPI::Token::Whitespace '\n' PPI::Token::Whitespace '\n' PPI::Statement PPI::Token::Word 'fun' PPI::Token::Whitespace ' ' PPI::Token::Word 'foo' PPI::Token::Whitespace ' ' PPI::Structure::List ( ... ) PPI::Statement::Expression PPI::Token::Word 'Num' PPI::Token::Whitespace ' ' PPI::Token::Symbol '$x' PPI::Token::Whitespace ' ' PPI::Structure::Block { ... } PPI::Token::Whitespace '\n' PPI::Token::Whitespace ' ' PPI::Statement PPI::Token::Symbol '$x' PPI::Token::Whitespace ' ' PPI::Token::Operator '+' PPI::Token::Whitespace ' ' PPI::Token::Number '1' PPI::Token::Whitespace '\n' PPI::Token::Whitespace '\n'

For the second part, I can confirm the same behavior, but I can't say in which of the modules this is a bug...