forked from Perl-Critic/Perl-Critic
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathChanges
2189 lines (1728 loc) · 87.8 KB
/
Changes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Revision history for Perl module Perl::Critic
1.126 2015-08-10
[New Policies]
* Added a policy: ControlStructures::ProhibitYadaOperator - Never use ...
in production code.
[Bug Fixes]
* Fixed problems arising from having -b in your .perltidyrc file. Thanks
@hjkatz.
* Removed extra newline from policy names returned by P::C::Config->policies.
Thanks @ratsbane.
* `fc` and `say` are now covered by ProhibitUselessTopic. Thanks @JRaspass.
[Miscellanea]
* Add more strict/warnings importer modules. Thanks @oalders.
* Path::Tiny is now recommended over File::Slurp
* Micro-optimize by calling ->content() directly instead of going
through the overloads. Thanks @JRaspass.
* Square brackets are now allowed around your `## no critic` policy
list. Thanks @zdm.
1.125 2015-03-02
[Bug Fixes]
* Corrected dependency on List::Util::any() to List::MoreUtils::any()
[Miscellanea]
* Revised and updated documentation.
1.124 2015-02-27
[Policy Changes]
* The ProhibitUnusedPrivateSubroutines policy can now ignore files that
use particular modules with 'skip_when_using' option allows of, for
example, skipping the policy for roles. Thanks to Mark Fowler.
* The RequireUseStrict and RequireUseWarnings policies now regard Moose,
Moo, Mouse, Dancer, Mojolicious, and several other modules as equivalent
to the strict and warnings pragma.
[Bug Fixes]
* The RequireChecked* family of policies has been fixed to accommodate
version numbers when use-ing the autodie pragma. GH #612. Thanks citrin.
1.123 2014-11-11
[Dependencies]
* Now requires PPI-1.220 which has numerous bug fixes. This may
eliminate the need for some "## no critic" markers you inserted to
work around those bugs. The "ProhibitUselessNoCritic" policy should
help you find them.
[Miscellanea]
* Fixed a typo in the Variables::ProhibitPerl4PackageNames message.
1.122 2014-08-25
[Dependencies]
* Now requires PPI-1.218 which has numerous enahncements and bug fixes.
Also now requires Readonly-2.00, which obviates the need for Readonly::XS
to get fast constants.
* File::HomeDir, File::Which, and Term::ANSIColor are all required now
instead of being optional or recommended. This simplifies our test code
and ensures consistent optimal behavior for all users.
[New Policies]
* Added two new policies: BuiltinFunctions::ProhibitUselessTopic and
RegularExpressions::ProhibitUselessTopic.
[Miscellanea]
* Updated the perlcritic.el script to use modern Emacs hooks.
Thanks to @intrigeri and the Debian team for the patch. Fixes GH #556.
* Removed all the internal RCS keyword boilerplate blocks that were never
getting expanded.
1.121_01 2013-11-17
* Changes summarized above under 1.122
1.121 2013-11-02
[New Features]
* Added new themes based on CERT guidelines. Thanks Kirk Kimmel.
[Administrative Changes]
* The source code repository for Perl-Critic has been moved to GitHub
at http://github.com/Perl-Critic/Perl-Critic. All tickets from the
RT queue have also been moved there. Please use GitHub for submitting
any new bugs or corresponding about existing ones. Huge thanks to
Tim Bunce, Andreas Marienborg, fREW Schmidt, and Graham Knop for
making this happen.
[Miscellanea]
* This change log was reformatted to comply with CPAN::Changes::Spec,
courtesy of Neil Bowers as part of a quest on http://questhub.io.
Does your change log comply?
1.120_01 2013-10-29 *DEVELOPER RELEASE*
* Changes summarized above
1.120 2013-10-25
[Bug Fixes]
* Corrected "Possible precedence issue with control flow operator"
warning. This fixes RT #88866
1.119 2013-09-25
[Bug Fixes]
* Tests were failing with Config::Tiny 2.17 or later, due to a
change in the error messages produced by that module.
This fixes #16 on Github, #88679 & #88889 on RT.
[Policy Changes]
* BuiltinFunctions::ProhibitVoidGrep and ::ProhibitVoidMap: grep
and map called as functions are now allowed in slice operations.
RT #79289. Thanks to Wade at Anomaly dot org for the patch.
* Subroutines::RequireArgUnpacking: Most tests of the size of @_
are now allowed. RT #79138
[Other Changes]
* Modernized our usage of Exporter. See RT #75300. Thanks
to Olivier Mengué for the patch.
1.118 2012-07-10
[Policy Changes]
* CodeLayout::RequireTidyCode: Revise to work with incompatible
changes in Perl::Tidy 20120619. RT #77977.
* TestingAndDebugging::ProhibitNoWarnings: Correct the parse of the
'no warnings' statement, so that 'no warnings "qw"' is recognized
as supressing just 'qw' warnings. RT #74647.
* Miscellanea::RequireRcsKeywords has been moved to the Perl-Critic-More
distribution, RT #69546
[Other Changes]
* Make all unescaped literal "{" characters in regexps into
character classes. These are deprecated, and became noisy with
Perl 5.17.0. RT #77510.
1.117 2011-12-21 HAPPY HOLIDAYS!
[New Policies]
* Variables::ProhibitAugmentedAssignmentInDeclaration reports
constructs like 'my $x += 1'. Contributed by Mike O'Regan.
[Policy Changes]
* BuiltinFunctions::ProhibitLvalueSubstr: Add explicit 'use version'.
RT #68498.
* CodeLayout::ProhibitHardTabs: Add 'pbp' to the default_themes list.
RT #71093.
* ControlStructures::ProhibitMutatingListFunctions now understands that
tr///r (introduced in 5.13.7) does not change its operand.
* ControlStructures::ProhibitMutatingListFunctions now understands that
'//=', '<<=', and '>>=' are assignment operators. RT #70901.
* ErrorHandling::RequireCheckingReturnValueOfEval now allows things
like grep { eval $_ }. RT #69489.
* Modules::RequireExplicitPackage now has configuration option
allow_import_of, to allow the import of specified modules before
the package statement. RT #72660.
* RegularExpressions::ProhibitEnumeratedClasses no longer thinks
that [A-Za-z_] matches \w. RT #69322.
* RegularExpressions::ProhibitUnusedCaptures now skips the first
block of an 'if' or 'elsif' if the regular expression is bound to
its operand with the '!~' operator. RT #69867.
* RegularExpressions::ProhibitUnusedCaptures now looks into lists
and blocks in the replacement portion of the regular expression if
/e is asserted. RT #72086.
* RegularExpressions::RequireDotMatchAnything,
RegularExpressions::RequireExtendedFormatting and
RegularExpressions::RequireLineBoundaryMatching now honor defaults
set with 'use re "/modifiers"'. RT #72151.
* Subroutines::ProhibitManyArgs now recognizes '+' as a prototype
character.
* Variables::ProhibitPunctuationVars now recognizes bracketed
variables embedded in interpolated strings (e.g. "${$}"). For the
purpose of the 'allow' configuration, these are considered
equivalent to the unbracketed form. RT #72910.
[Other Changes]
* Corrected POD in Perl::Critic::PPI::Utils. RT #68898.
* Perl::Critic::Violation source() method now returns the line
containing the violation (not the first line) when the statement
containing the violation spans multiple lines.
1.116 2011-05-15
[Policy Changes]
* BuiltInFunctions::ProhibitLvalueSubstr does not report violations
if the document contains an explicit 'use n.nnn;' where the
version is before 5.005. RT #59112
* Documentation::RequirePodSections no longer blows up on code
having POD but no =head1. This problem was introduced with RT
#59268. RT #67231
* RegularExpressions::ProhibitUnusedCapture should more reliably
find things like s/(a)/${1}2/. RT #67273.
* ValuesAndExpressions::ProhibitMagicNumbers and
Module::RequireVersionVar now treat versions passed as the second
argument of a 'package' statement the same as versions declared as
'our $VERSION ...'. RT #67159
* Variables::RequireLexicalLoopIterators does not report violations
if the document contains an explicit 'use n.nnn;' where the
version is before 5.004. RT #67760
1.115 2011-03-31
[Minor Changes]
* Fatal error in RegularExpressions::ProhibitUnusedCapture here
document check. RT #67116.
* Internal POD error in Documentation::RequirePodLinksIncludeText. Patch
by Salvatore Bonaccorso. RT #67012
1.114 2011-03-26
[Policy Changes]
* Documentation::RequirePodLinksIncludeText now handles nested POD
formatting. RT #65569
* Clarified relation of severity numbers to names in Perl::Critic
POD. RT #66017
* Removed caveats from Variables::RequireLocalizedPunctuationVars,
no longer necessary with PPI 1.208. RT #65514
* Have InputOutput::RequireBriefOpen attempt to expand scope as
necessary to deal with the case where the open() and the
corresponding close() are not in the same scope. RT #64437
* RegularExpressions::ProhibitUnusedCapture now looks inside
double-quotish things. RT #38942.
* RegularExpressions::ProhibitUnusedCapture now takes logical
alternation into account, so that (e.g.)
if ( /(a)/ || /(b)/ ) {
say $1;
}
is not a violation. RT #38942.
* ValuesAndExpressions::ProhibitCommaSeparatedStatements now
recognizes 'return { foo => 1, bar => 2 }' as containing a hash
constructor, not a block. This was fixed by PPI 1.215. RT #61301.
* ValuesAndExpressions::ProhibitCommaSeparatedStatements now
recognizes 'bless { foo => 1, bar => 2 }' as containing a hash
constructor, not a block. This was fixed by PPI 1.215. RT #64132.
1.113 2011-02-14
[New Policies]
* InputOutput::RequireEncodingWithUTF8Layer recommends
':encoding(utf8)' over ':utf8' in open() and binmode(). It is severity 5
because of the bad things that can happen if invalid UTF8 gets loose in
your code.
* Modules::ProhibitConditionalUseStatements prohibits
'use module' inside a conditional, since the statement is executed
unconditionally at compile time. Thanks to Peter Guzis for submitting
the policy and tests in RT #59065.
[Policy Changes]
* CodeLayout::RequireConsistentNewlines produces multiple undefined
value errors when a violation is found. RT #65663
* ControlStructures::ProhibitMutatingListFunctions allows s///r,
which was introduced in 5.13.2.
* ControlStructures::ProhibitPostfixControls now looks for "when". It is
treated in the same way as "if".
* Documentation::RequirePodSections now honors '## no critic'
annotation anywhere before the '__END__', '__DATA__', or first
'=head1', whichever comes first. The line number of the offending
'=head1 NAME' was added to the violation description. RT #59268.
* RegularExpressions::ProhibitUnusedCapture now takes account of the
use of $- and $+ (and their English equivalents under 'use
English') provided the subscripts are literal integers.
* RegularExpressions::ProhibitUnusedCapture now takes account of the
use of capture variables in the replacement portion of
s/.../.../e.
* Subroutines::ProhibitUnusedPrivateSubroutines now looks inside
regular expressions.
* ValuesAndExpressions::ProhibitMagicNumbers now supports Const::Fast.
* ValuesAndExpressions::ProhibitMagicNumbers now has a
constant_creator_subroutines parameter to allow the user to
configure the names of subroutines that create constants. RT #62562.
* ValuesAndExpressions::ProhibitMismatchedOperators didn't handle file
test operators properly. Patch by H.Merijn Brand. RT #58751
* Variables::ProhibitUnusedVariables now looks inside regular
expressions.
* ValuesAndExpressions::RequireInterpolationOfMetachars now detects
and complains about "\b" and "\l" as documented in perlop, and
"\1" through "\7", which are not documented there, but were found
in toke.c.
[New Developer Features]
* uses_module(), namespaces(), and subdocuments_for_namespace() methods on
Perl::Critic::Document.
* Perl::Critic::Document->new() now accepts a -filename-override argument
for setting the filename when the source code comes from something
other than an actual file.
[Other Changes]
* Test::Perl::Critic::Policy no longer exports by default.
* Build phase now requires Test::Deep.
* Added example using Try::Tiny to documentation of
ErrorHandling::RequireCheckingReturnValueOfEval. Suggested by Andy
Lester on the developers mailing list.
* In order to get more consistent behavior across all installations of
Perl::Critic, IPC::Open2 (which actually is part of core), PPIx::Regexp,
Perl::Tidy, Pod::Spell, and Text::ParseWords are no longer optional
prerequisites.
* Now depends upon PPIx::Utilities v1.1.0.
[Bug Fixes]
* Build.PL/Makefile.PL didn't specify a minimum version of version.pm, but
TestingAndDebugging::RequireUseStrict did. RT #58952
* Perl::Critic::Annotation needs to look inside the __END__ statement to
find the true end of the document, otherwise POD policies may give false
positives. RT #59176
* BuiltinFunctions::ProhibitStringyEval no longer dies on eval
"#...". RT #60179
* RegularExpressions::ProhibitUnusedCapture now takes account of the
%LAST_PAREN_MATCH as well as %+ if English has been loaded. RT #60002
* Subroutines::ProhibitManyArgs now interprets prototype groups (e.g.
\[$@%]) as representing a single argument.
* Require Exporter version 5.63 (versus version 0) to get sane handling of
export tags. RT# 61071
* Prevent Subroutines::ProhibitUnusedPrivateSubroutines from failing
on &_subroutine(). RT #61311
* Subroutines::ProhibitAmpersandSigils now allows references of the
form \( &sub1, &sub2 ). RT #49609
1.112_002 2011-02-09
1.112_001 2010-12-14
* Changes summarized into 1.113 above.
For exact details, see Changes on BackPAN.
1.111 2010-12-14
[Bug Fixes]
* TestingAndDebugging::ProhibitNoStrict and ProhibitNoWarnings no longer
rely on the behavior of all() when the list is empty due to change in
List::MoreUtils 0.28. RT #63816
1.110_001 2010-11-30
* Changes summarized into 1.113 above.
For exact details, see Changes on BackPAN.
(Yes, all of this stuff was not in 1.111.)
1.109 2010-08-29
[Bug Fixes]
* ValuesAndExpressions::RequireInterpolationOfMetachars fix due to changes
in Email::Address 1.890. Note that this may find problems in code that
it didn't before, e.g. q<'@foo'>.
1.108 2010-06-22
[Dedication]
* This is the "Give Shawn Moore what we promised him a year ago and hurry
up and get this out before Brad Oaks gives his YAPC::NA talk" release.
[New Policies]
* Documentation::RequirePodLinksIncludeText
* Subroutines::ProhibitUnusedPrivateSubroutines
[New Features]
* There is a new global configuration item, 'program-extensions', which
configures Perl::Critic's idea of which file name extensions represent
programs. The desired extensions are specified as a space-separated list,
with leading '.' on each if that is desired. Files whose names end in
'.PL' will always be considered programs. This can be overridden by
command option --programs-extensions, which can be specified multiple
times.
* There is now a perlcritic --allow-unsafe switch. Without this switch,
Perl::Critic will silently refuse to load any Policy that is marked
unsafe. Unsafe Policies are usually ones that may compile or execute
untrusted code (see Perl::Critic::DynamicPolicy for an example); Policy
authors can mark their policies as unsafe by overriding the is_safe()
method.
* The framework that we use to test Perl::Critic Policies has been
packaged into a convenient module that you can use to test your own
Policies. See Test::Perl::Critic::Policy and Perl::Critic::TestUtils
for details.
[Policy Changes]
* BuiltInFunctions::ProhibitLvalueSubstr no longer complains when there
is a low-precedence operator between the substr() and the assignment
operator.
* CodeLayout::ProhibitParensWithBuiltins now allows 'state ($foo)'. RT
#52029
* ErrorHandling::RequireCarping now has an
allow_in_main_if_not_in_subroutine option to allow "die" directly in
the default namespace.
* InputOutput::RequireBriefOpen now recognizes CORE::open(),
CORE::close(), CORE::GLOBAL::open(), and CORE::GLOBAL::close(). RT
#52391
* Modules::ProhibitEvilModules now complains by default about the modules
deprecated by the Perl 5 Porters in 5.12.
* Modules::RequireVersionVar documentation updated to make clear that "my
$VERSION" does not work as a module version declaration. RT #56667
* The RegularExpressions::* policies have been converted from using
Regexp::Parser to using PPIx::Regexp for their heavy lifting.
* RegularExpressions::ProhibitCaptureWithoutTest now allows capture
variables inside when() {}. RT #36081.
* RegularExpressions::ProhibitUnusedCapture now checks for unused named
captures.
* Subroutines::ProhibitManyArgs revised to count only characters in the
prototype that represent arguments. RT #56627
* Subroutines::ProhibitNestedSubs no longer complains about scheduled
blocks (BEGIN, etc.) inside subroutines and vice versa.
* Subroutines::RequireFinalReturn should now understand a final given/when
statement, and declare an error if there is no 'default' block or if any
branch does not return.
* TestingAndDebugging::RequireUseStrict now accepts 'use 5.011' or greater
as equivalent to 'use strict'.
* ValuesAndExpressions::ProhibitMismatchedOperators false positive with
"'foo' x 15 . 'bar'". RT #54524
* Variables::ProhibitPunctuationVars gave false positives on qr// regexp's
ending in '$'. RT #55604
[Bug Fixes]
* The "## no critic" annotations now respect #line directives.
* Annotations on statements spanning more than one line (e.g.
my $foo =
'$bar'; ## no critic (RequireInterpolationOfMetachars)
) are now handled as single-line annotations, not block annotations.
* All instances of L<Foo> in the POD have been changed to L<Foo|Foo>.
L</bar> and L<Foo/bar> were allowed to stand. RT #37485
* Spaces are now allowed immediately inside the enclosing parentheses in
"## no critic ( Foo )". RT #52038
* With the introduction of PPIx::Regexp, Perl::Critic no longer dies
when it encounters a Perl 5.010 regexp. RT #49442.
* DEVELOPER.pod typo in link to
ValuesAndExpressions::ProhibitConstantPragma policy. RT #57818
* Spelling errors in documentation. RT #57375
* "die" used instead of "croak". RT #56619
* Fixed regex test that caused test failures on every Perl 5.11
(credit Tom Wyant).
* t/20_policy_pod_spelling.t now works (or at least no longer fails)
in non-English locales (again). RT #43291 and RT #48986.
* Perldoc has broken link for McCabe score definition. RT #53219
* RT #33935 and #49679 were fixed by upgrading to PPI 1.208
[Other Changes]
* Perl::Critic::Utils::is_unchecked_call() updated to include chmod in the
set of things covered by autodie (this happened in autodie v2.08). The
primary effect of this is on InputOutput::RequireCheckedSyscalls.
* Now depends upon Task::Weaken to ensure that we only install with perls
where Scalar::Util::weaken() works.
* Email::Address was optional, but is now required. So everyone
gets the optimal behavior from RequireInterpolationOfMetachars.
* Some infrastructure has been extracted to the new PPIx-Utilities
distro. It is also a required dependency here. Over time a good
portion of Perl::Critic::Utils* will be migrated to this distribution.
* Perl::Critic::Utils::PPI::get_constant_name_element_from_declaring_statement()
is deprecated because it doesn't handle multiple constants being
declared within a single "use constant" statement. Use
PPIx::Utilities::Statement::get_constant_name_elements_from_declaring_statement()
instead.
* Removed all uses of Perl::Critic::Utils::PPIRegep. Since the
PPIx::Regexp update, Perl::Critic only used get_match_string() and
friends, which were superseded by the corresponding PPI methods.
Perl::Critic now depends on PPI-1.208 or newer.
* Moved Perl::Critic::Utils::PPIRegexp to the Perl-Critic-Deprecated.
* The PolicySummary.pod file is now generated when the distribution
is created, rather than when you install it. This ensures the file
will be available on http://search.cpan.org. Thanks to Bear Longyear
for bringing this to our attention.
1.107_001 2010-06-20
* Changes summarized into 1.108 above.
For exact details, see Changes on BackPAN.
1.106 2010-05-10
[Bug Fixes]
* NamingConventions::Capitalization fix for PPI 1.212. RT #57348
1.105_03 2010-03-21
1.105_02 2010-01-23
1.105_01 2010-01-16
* Changes summarized into 1.108 above.
For exact details, see Changes on BackPAN.
1.105 2009-09-07
[Bug Fixes]
* Variables::ProhibitPunctuationVars would complain about "%-" appearing
anywhere in a string. RT #49016
[Policy Changes]
* InputOutput::RequireCheckedSyscalls now complains about unchecked "say"
by default. RT #37487
1.104 2009-08-23
[Dedication]
* This release is dedicated to Tom Wyant in appreciation of the amount of
effort he put into the enhancements and bug fixes in this release, for
having the patience to wait for the amount of time that it took to get
them out, and for overall awesomeness. Thank you, Tom.
[New Policies]
* Objects::ProhibitIndirectSyntax
* ValuesAndExpressions::ProhibitComplexVersion
* ValuesAndExpressions::RequireConstantVersion
[New Optional Requirement]
* Email::Address, if you want
ValuesAndExpressions::ProhibitInterpolationOfLiterals to properly ignore
email addresses.
[New Features]
* Perlcritic will list the names of files with violations if given the
--files-with-violations option, or the names of files without
violations if given the --files-without-violations options. These
have synonyms -l and -L respectively.
* Perlcritic has a new --list-enabled option, which lists the Policies
that will be enforced, given the current configuration. This is
useful if you've written a complex command-line or modified your
.perlcriticrc file and you want to see which Policies *would*
be used with the current configuration, if you were actually going
to critique a file with it.
* Perl::Critic::Violation now takes #line directives into account in the
%F, %f, and %l formats. You can get the old values via the new %G, %g,
and %L formats.
[Policy Changes]
* CodeLayout::ProhibitParensWithBuiltins was complaining in certain cases
where parentheses are required due to operator precedence. RT #46862.
* ControlStructures::ProhibitMutatingListFunctions no longer complains
about uses of tr/// that don't modify the operand. Reported by EDAVIS,
RT #44515.
* Miscellanea::RequireRcsKeywords now accepts "qw$Keyword: ...$". RT
#45196.
* Modules::RequireFilenameMatchesPackage now respects logical filenames
defined by the "#line" directives. This allows the Policy to work
properly with IDEs and code generators.
* NamingConventions::Capitalization now allows fully qualified subroutine
declarations ( e.g. "sub Foo::Bar::baz {...}" ). However, the
non-package part of the subroutine name must still conform to whatever
capitalization rule you have chosen.
* RegularExpressions::ProhibitCaptureWithoutTest no longer complains if
the regex is followed by an "or die" or similar. Reported by EDAVIS,
RT #36081.
* RegularExpressions::ProhibitComplexRegexes no longer counts variable
substitutions in the length. Reported by EDAVIS, RT #36098.
* RegularExpressions::ProhibitUnusedCapture now considers the body of
while loops and not just their condition. Reported by EDAVIS, RT
#38942.
* ValuesAndExpressions::ProhibitVersionStrings was getting confused by
comments. Reported by Kevin Ryde, RT #44986.
* ValuesAndExpressions::RequireInterpolationOfMetachars now allows sigils
in the arguments to "use vars". Contributed by Kevin Ryde, RT #47318.
* ValuesAndExpressions::RequireInterpolationOfMetachars now properly
ignores email addresses, if you have Email::Address installed. Inspired
by the Kevin Ryde contribution in RT #47318.
* Variables::ProhibitPunctuationVars gained the ability to look inside
interpolated strings. Doing this correctly is challenging and things
may not work out right; how the policy does this can be controlled via
the new "string_mode" option. Contributed by Edgar Whipple
<perlmonk at misterwhipple dot com>.
* Variables::ProhibitPunctuationVars now ignores $] by default since there
is no English.pm equivalent.
[Other Bug Fixes]
* Perl::Critic::Utils::parse_arg_list() was slurping up the "or die ..."
portion of "open my $foo, 'somefile' or die ...", causing
InputOutput::ProhibitTwoArgOpen to not complain about this example.
Reported by Alexandr Ciornii, RT #44554.
[Minor Changes]
* The line count emitted by the --statistics option is further broken down
by line content.
[Minor Documentation Fixes]
* ValuesAndExpressions::ProhibitInterpolationOfLiterals. Reported by
Debian in http://bugs.debian.org/542814, RT #48936
[Build Fixes]
* There wasn't a specific version given for the List::MoreUtils dependency
and we're using features that weren't available until 0.19. So, we now
require version 0.19. Noticed by John J. Trammell, RT #48917.
* Some tests were tied to the specific "true" and "false" values that some
functions were returning. Reported by Michael Schwern, RT #43910.
[Other News]
* Komodo version 5.1.1 now has built-in support for Perl-Critic,
if you have the Perl::Critic and criticism modules installed.
Both should be available through the ActiveState Perl Package
Manager ppm(1).
1.103 2009-08-03
* Fix configure_requires prerequisite on Module::Build 0.34_02.
1.102 2009-08-03
[Bug Fixes]
* Works with PPI 1.205. Yay for 5.10 support!
* Variables::RequireLexicalLoopIterators didn't work correctly on foreach
loops with labels.
1.101_003 2009-07-22
1.101_002 2009-07-21
1.101_001 2009-07-21
* Changes summarized into 1.102 above.
For exact details, see Changes on BackPAN.
1.100 2009-07-17
* This is a POD fix release to deal with issues identified by Test::POD
1.40. There is no functional difference between this release and 1.098.
This is the last release of Perl::Critic that will be compatible with PPI
1.203. PPI's parsing of for(each)? loops is changing in its next release
in an incompatible manner and there will be a release in the near future
to make Perl::Critic compatible with that change.
1.099_002 2009-06-27
1.099_001 2009-06-25
* Experimental releases. For exact details, see Changes on BackPAN.
1.098 2009-03-07
[Some Exciting News]
* The Perl Development Kit (PDK 8.0) from ActiveState now includes a
very slick graphical interface to Perl-Critic. I highly recommend
that you check it out. Here's a link to screenshots and docs:
http://docs.activestate.com/pdk/8.0/PerlCritic_gui.html
[New Features]
* Violation coloring is now configurable via command line or profile. The
profile entries are color-severity-highest, -high, -medium, -low, or
-lowest. Numbers are accepted in lieu of named severities (e.g.
'color-severity-5' for 'color-severity-highest'), and 'colour' is
accepted in lieu of 'color'.
* Handling of unrecognized policy configuration items is now controlled by
the profile_strictness. The default is to warn about them. The previous
default was that they were fatal.
* -p is now a synonym for --profile.
* The --verbose option for perlcritic now supports a %C format that will
displays the class of PPI::Element that caused the violation.
[Policy Changes]
* ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditions
didn't include "pbp" in its default themes even though it is derived
from the book. Now it does. :]
* ErrorHandling::RequireCarping now allows a here document as the last
element if the "allow_messages_ending_with_newlines" option is true.
* Fix Subroutines::ProhibitAmpersandSigils so it allows "defined(&x)" as
well as "defined &x". Patch from Kevin Ryde, RT #38855.
* Subroutines::ProtectPrivateSubs now has an "allow" option to specify
subroutines which are exempt from this policy. RT #38678.
Additionally, a "private_name_regex" option has been added that allows
you to specify what a private subrouting name looks like.
* Subroutines::RequireArgUnpacking now has an "allow_subscripts" option
to allow array slices and elements. RT #34009.
* Subroutines::RequireArgUnpacking now has an "allow_delegation_to" option
to allow the usual delegation idiom. Delegation to 'SUPER::' and
'NEXT::' are allowed by default. RT #33839.
* Subroutines::RequireArgUnpacking no longer generates a false positive
for '$$_[]', which is an obfuscated way of saying '$_->[]'. RT #37713.
* ValuesAndExpressions::ProhibitMagicNumbers now has an
allow_to_the_right_of_a_fat_comma option, which defaults to true. Note
that it currently only works /directly/ to the right of a fat comma.
* Variables::ProhibitMatchVars had its default themes changed to "core
performance pbp", instead of "core bugs pbp" because, while the match
variables make regular expressions slow, it doesn't cause them to not
work correctly.
* Variables::ProhibitPackageVars has had FindBin and Log::Log4perl added
to the default exemptions.
* Variables::ProhibitReusedNames now has an "allow" option to specify
names that can be reused. It defaults to enabling $self and $class. RT
#42767.
* Variables::RequireLocalizedPunctuationVars has a customizable set of
exemptions via the "allow" option.
[New Developer Features]
* The guts of perlcritic have been moved to Perl::Critic::Command. You
can invoke Perl::Critic::Command::run() to get the equivalent of running
the command. (Note, however, this interface WILL change, so don't count
on the current one.)
* Modules have had a "INTERFACE SUPPORT" section added which states
whether the Perl::Critic developers consider the particular module is
public or not. Any removal of functionality from a public module will
go through a deprecation cycle. Non-public modules may have their
interfaces changed without notice.
* P::C::Policy now has an is_enabled() method.
* P::C::Violation now has an element_class() method.
[Bug Fixes]
* CodeLayout::ProhibitTrailingWhitespace didn't notice cases where PPI
would produce instances of PPI::Token::Whitespace that contained
multiple lines.
* Subroutines::ProtectPrivateSubs no longer regards the exportable POSIX
subroutines whose names begin with underscore as private. RT #38678.
* Subroutines::RequireArgUnpacking mishandled a complicated situation with
$_ being an array reference. RT #39601.
* Variables::RequireLocalizedPunctuationVars now applies to subscripted
names. RT #29384.
[Internals]
* The guts of Build.PL and Makefile.PL have been rearranged.
1.097_002 2009-03-01
1.097_001 2009-03-01
* Changes summarized into 1.098 above.
For exact details, see Changes on BackPAN.
1.096 2009-02-01
[New Policies]
* ValuesAndExpressions::ProhibitSpecialLiteralHeredocTerminator
[Policy Changes]
* Documentation::PodSpelling now has a stop_words_file option.
* Modules::ProhibitEvilModules now has a modules_file option.
[Bug Fixes]
* ErrorHandling::RequireCarping will now allow a literal newline
as well as "\n". Fixed by Kyle Hasselbacher, RT #25046
* Fix InputOutput::ProhibitTwoArgOpen so it allows '-|' or '|-' as the
second of two arguments. Patches from Kyle Hasselbacher and Leland
Johnson, RT #42384.
* InputOutput::RequireBracedFileHandleWithPrint applies to printf as well
as print. Fixed by Kyle Hasselbacher, RT #42537.
* TestingAndDebugging::RequireUseStrict and
TestingAndDebugging::RequireUseWarnings are no longer fooled by a
block-scoped pragma. RT #42310.
* ValuesAndExpressions::RequireInterpolationOfMetachars allows for escaped
backslashes. Fixed by Tom Wyant, RT #38530.
* Fix for problem in P::C::Document in dealing with underscores in
expressions like "use 5.009_001". Patch by Kevin Ryde, RT #36570 and
#42089.
* Fix in extras/perlcritic.el for a radio button. Patch by Kevin Ryde, RT
#42190.
* Fix distclean target in Makefile.PL. Patch by Richard Soderberg,
RT #42088.
* Fix temporary files not being cleaned up after tests. Patch by Kyle
Hasselbacher, RT #41443.
* Deal with changes in Pod::Parser v1.36 in test in t/05_utils_pod.t.
[Minor Changes]
* Documentation improvements contributed by Mark Grimes in response to RT
#41942.
1.095_001 2009-01-18
* Changes summarized into 1.096 above.
For exact details, see Changes on BackPAN.
1.094001 2009-01-01
[Bug Fixes]
* Tests would fail on systems without Regexp::Parser installed.
1.094 2009-01-01
[Incompatible Changes]
* The way that "## no critic" markers was refactored. As
a result, we discovered that the syntax for the markers was pretty
vague. If you didn't do it just right, it would disable all policies,
and not just the specific ones that you wanted. So we've tightened this
up a bit. If you followed the examples that have been in the docs for
the last couple years, then you should be fine. But if you've been
using certain other variations in your "## no critic" markers, then you
might suddenly find yourself violating the new
ProhibtUnrestrictedNoCritic policy. To fix this, just make sure your
Policy names appear in parentheses:
## no critic Foo, Bar, Baz # wrong!
## no critic Foo Bar Baz # wrong!
## no critic (Foo, Bar, Baz) # ok!
## no critic qw(Foo Bar Baz) # also ok!
* The deprecated $FORMAT variables for Perl::Critic::Policy and
Perl::Critic::Violation no longer exist. Use the corresponding
get_format() and set_format() functions instead.
[New Policies]
* Miscellanea::ProhibitUnrestrictedNoCritic
* Miscellanea::ProhibitUselessNoCritic
* NamingConventions::Capitalization
* Subroutines::ProhibitReturnSort
* Variables::ProhibitReusedNames
[Removed Policies]
* NamingConventions::ProhibitMixedCaseSubs and
NamingConventions::ProhibitMixedCaseVars have been moved to a separate
Perl-Critic-Deprecated distribution. The
NamingConventions::Capitalization policy does everything they do, plus
more.
[Policy Changes]
* BuiltinFunctions::ProhibitStringyEval now has an allow_includes option
that makes it behave (mostly) like Ricardo SIGNES'
Perl::Critic::Policy::Lax::ProhibitStringyEval::ExceptForRequire.
* InputOutput::RequireCheckedClose, InputOutput::RequireCheckedOpen, and
InputOutput::RequireCheckedSyscalls now all support autodie.
Unfortunately, autodie is currently treated like a module and not a
pragma, which means that the lexical scoping is not taken into account.
* InputOutput::RequireCheckedSyscalls now has an exclude_functions
parameter.
* Modules::ProhibitEvilModules now allows you to specify what the
description of a use of a bad module should be, to, say, suggest that
people use autodie instead of Fatal.
* Subroutine::ProhibitExcessComplexity violation descriptions now include
the name of the subroutine, thanks to Andreas Koenig, RT #40070.
* TestingAndDebugging::RequireUseStrict and
TestingAndDebugging::RequireUseWarnings now have equivalent_modules
parameters that allow you to designate other modules as being equivalent
to the strict and warnings pragmata. This one is for all you Moose fans
out there. :]
[Bug Fixes]
* ControlStructures::ProhibitUnreachableCode would treat package
statements as unreachable. Fixed by Kevin Ryde. RT #41734
* Fix warning from InputOutput::ProhibitOneArgSelect when select was
called with no arguments. RT #41926
* Miscellanea::RequireRcsKeywords couldn't find keywords after __END__
that didn't look like part of POD.
* Modules::RequireFilenameMatchesPackage would incorrectly complain about
programs. Yet more greatness contributed by Schwern. RT #39024.
* If a perlcriticrc file referred to a policy that wasn't installed and
the profile-strictness option was set to "fatal",
Perl::Critic::PolicyFactory fell over instead of reporting the
problematic policy name.
[Miscellanea]
* Perl::Critic::Violation will automatically strip trailing periods
from your Policy description and explanation strings. This ensures that
the punctuation is consistent with the format specified by the user via
the -verbose formatting options.
[New Developer Features]
* Perl::Critic::Policy::prepare_to_scan_document() is now checked and a
Policy can disable itself for just a single document, which can speed
things up.
1.093_03 2008-12-11
1.093_02 2008-10-30
1.093_01 2008-09-07
* Changes summarized into 1.094 above.
For exact details, see Changes in 1.093_003 on BackPAN.
1.092 2008-09-02
[Bug Fixes]
* Fixed POD errors that were causing build failures. Sorry
about that.
1.091 2008-09-01
[New Policies]
* RegularExpressions::RequireDotMatchAnything
[New Features]
* perlcritic now supports a -pager option, so you can more easily
send the output to your favorite pager. You can set this option
on the command-line or in your .perlcriticrc file. See the
perlcritic perldoc for more details. Credit to Michael Schwern.
* The output from "perlcritic -doc PATTERN" will be automatically
sent to your pager if you have set the -pager option.
[Policy Changes]
* CodeLayout::ProhibitQuotedWordLists no longer applies if the list
contains any non-words, by default. A non-word is anything that does
not match /[\w-]+/. You can restore the former behavior by setting the
"strict" option. RT #37886.
* CodeLayout::ProhibitQuotedWordLists also now applies to the import
arguments of a C<use> statement. RT #24467.
* ErrorHandling::RequireCheckingReturnValueOfEval now recognizes ternary
left-sides as valid checks.
* RegularExpressions::RequireExtendedFormatting gains a
minimum_regex_length_to_complain_about option. Also, regexes that
contain only word and whitespace characters are now exempt from this
policy, by default; you can make it complain about them by turning on
the new strict option. Contributed by Michael Schwern. RT #38531.
* TestingAndDebugging::ProhibitNoWarnings now supports a
allow_with_category_restriction option, thanks to Michael Schwern.
RT #38514.
* CodeLayout::ProhibitHardTabs now allows leading tabs in qw() word lists
and regexes with the /x modifier. You can still configure this
policy to forbid all hard tabs, if you like. RT #32440
[Bug Fixes]
* perlcritic should now work under PAR. RT #38380.
* URL for our repository in META.yml now works for anonymous
checkout. The password is "" (empty). RT #38628.
* color for high-severity violations is now magenta because
it is more redable than yellow on white backgrounds. RT #38511.
1.090 2008-07-22
[Bug Fixes]
* Test was incorrectly failing when Regexp::Parser wasn't installed.
1.089 2008-07-21
[Minor Enhancements]
* -s is now a synonym for --single-policy.
[Policy Changes]
* Subroutines::ProhibitBuiltinHomonyms now also prohibits subroutines
with the same name as a Perl keyword (e.g. if, foreach, while).
Inspired by RT #37632.
* Subroutines::ProtectPrivateSubs now allows expressions like
"shift->_some_private_method();". Note that this *only* applies
to the "shift" function -- a private method call on the right of any
other bareword still causes a violation. RT #34713.
* Subroutines::RequireFinalReturn now includes exec in the set of things
that mark a successful return. RT #37672
* ValuesAndExpressions::ProhibitInterpolationOfLiterals now takes a
allow_if_string_contains_single_quote option. Contributed by Ed
Avis <[email protected]>. RT #36125.
* ValuesAndExpressions::RequireInterpolationOfMetachars now supports a
rcs_keywords option to allow for the common case where those require
dollar signs.
[Bug Fixes]
* BuiltinFunctions::ProhibitSleepViaSelect would complain if there were
three undefs as arguments to select(), but one of them was the timeout.
RT #37416.
* Reduced false positives in
RegularExpressions::ProhibitSingleCharAlternation. Thanks to
Andy Lester and Elliot Shank test cases.
* RegularExpressions::ProhibitUnusedCapture would complain if there were
multiple captures used in a substitution, e.g. s/(.)(.)/$2$1/.
* Subroutines::ProhibitAmpersandSigils no longer complains about
"sort &foo(...)".
* Makefile.PL, Build.PL and other ".PL" scripts which typically do not
have a shebang are no longer mistaken as modules. This prevents
spurious warnings from Modules::RequireEndWithOne. RT #20481.
[Internals]
* Tests are now self compliant.
1.088 2008-07-04
[New Policies]
* ErrorHandling::RequireCheckingReturnValueOfEval
[Policy Changes]
* ValuesAndExpressions::ProhibitLeadingZeros now accepts octal numbers
for the Unix permissions argument to chmod, dbmopen, mkdir, sysopen, or
umask, by default. Use the "strict" option to get the old behavior.
RT #31977.
* Due to the consensus at YAPC::NA 2008,
Variables::ProhibitUnusedVariables default severity has been raised to
medium/3.
[Minor Changes]
* The perlcritic "--Version" option is now "--version" in order to act
like the rest of the world.
1.087 2008-06-21
[Policy Changes]