critic.t 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #!/usr/bin/perl
  2. #
  3. # This program is free software; you can redistribute it and/or modify
  4. # it under the terms of the GNU General Public License as published by
  5. # the Free Software Foundation; either version 2 of the License, or
  6. # (at your option) any later version.
  7. #
  8. # This program is distributed in the hope that it will be useful,
  9. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. # GNU General Public License for more details.
  12. #
  13. # You should have received a copy of the GNU General Public License
  14. # along with this program. If not, see <https://www.gnu.org/licenses/>.
  15. use strict;
  16. use warnings;
  17. use Test::More;
  18. use Test::Dpkg;
  19. unless (defined $ENV{DPKG_DEVEL_MODE}) {
  20. plan skip_all => 'not running in development mode';
  21. }
  22. if (defined $ENV{srcdir}) {
  23. chdir $ENV{srcdir} or die "cannot chdir to source directory: $!";
  24. }
  25. if (not eval { require Test::Perl::Critic }) {
  26. plan skip_all => 'Test::Perl::Critic required to criticize code';
  27. }
  28. my @policies = qw(
  29. BuiltinFunctions::ProhibitBooleanGrep
  30. BuiltinFunctions::ProhibitLvalueSubstr
  31. BuiltinFunctions::ProhibitReverseSortBlock
  32. BuiltinFunctions::ProhibitSleepViaSelect
  33. BuiltinFunctions::ProhibitStringySplit
  34. BuiltinFunctions::ProhibitUniversalCan
  35. BuiltinFunctions::ProhibitUniversalIsa
  36. BuiltinFunctions::ProhibitUselessTopic
  37. BuiltinFunctions::ProhibitVoidGrep
  38. BuiltinFunctions::ProhibitVoidMap
  39. BuiltinFunctions::RequireBlockGrep
  40. BuiltinFunctions::RequireBlockMap
  41. BuiltinFunctions::RequireGlobFunction
  42. BuiltinFunctions::RequireSimpleSortBlock
  43. ClassHierarchies::ProhibitAutoloading
  44. ClassHierarchies::ProhibitExplicitISA
  45. ClassHierarchies::ProhibitOneArgBless
  46. CodeLayout::ProhibitHardTabs
  47. CodeLayout::ProhibitQuotedWordLists
  48. CodeLayout::ProhibitTrailingWhitespace
  49. CodeLayout::RequireConsistentNewlines
  50. ControlStructures::ProhibitCStyleForLoops
  51. ControlStructures::ProhibitLabelsWithSpecialBlockNames
  52. ControlStructures::ProhibitMutatingListFunctions
  53. ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditions
  54. ControlStructures::ProhibitUntilBlocks
  55. Documentation::RequirePackageMatchesPodName
  56. InputOutput::ProhibitBarewordFileHandles
  57. InputOutput::ProhibitInteractiveTest
  58. InputOutput::ProhibitJoinedReadline
  59. InputOutput::ProhibitOneArgSelect
  60. InputOutput::ProhibitReadlineInForLoop
  61. InputOutput::ProhibitTwoArgOpen
  62. InputOutput::RequireBracedFileHandleWithPrint
  63. InputOutput::RequireCheckedOpen
  64. InputOutput::RequireEncodingWithUTF8Layer
  65. Miscellanea::ProhibitFormats
  66. Miscellanea::ProhibitUnrestrictedNoCritic
  67. Miscellanea::ProhibitUselessNoCritic
  68. Modules::ProhibitConditionalUseStatements
  69. Modules::ProhibitEvilModules
  70. Modules::RequireBarewordIncludes
  71. Modules::RequireEndWithOne
  72. Modules::RequireExplicitPackage
  73. Modules::RequireFilenameMatchesPackage
  74. NamingConventions::Capitalization
  75. Objects::ProhibitIndirectSyntax
  76. RegularExpressions::ProhibitSingleCharAlternation
  77. RegularExpressions::ProhibitUnusedCapture
  78. RegularExpressions::ProhibitUnusualDelimiters
  79. RegularExpressions::ProhibitUselessTopic
  80. RegularExpressions::RequireBracesForMultiline
  81. RegularExpressions::RequireExtendedFormatting
  82. Subroutines::ProhibitExplicitReturnUndef
  83. Subroutines::ProhibitNestedSubs
  84. Subroutines::ProhibitReturnSort
  85. Subroutines::ProhibitUnusedPrivateSubroutines
  86. Subroutines::ProtectPrivateSubs
  87. TestingAndDebugging::ProhibitNoStrict
  88. TestingAndDebugging::ProhibitNoWarnings
  89. TestingAndDebugging::RequireTestLabels
  90. TestingAndDebugging::RequireUseStrict
  91. TestingAndDebugging::RequireUseWarnings
  92. ValuesAndExpressions::ProhibitCommaSeparatedStatements
  93. ValuesAndExpressions::ProhibitComplexVersion
  94. ValuesAndExpressions::ProhibitInterpolationOfLiterals
  95. ValuesAndExpressions::ProhibitLongChainsOfMethodCalls
  96. ValuesAndExpressions::ProhibitMismatchedOperators
  97. ValuesAndExpressions::ProhibitMixedBooleanOperators
  98. ValuesAndExpressions::ProhibitQuotesAsQuotelikeOperatorDelimiters
  99. ValuesAndExpressions::ProhibitSpecialLiteralHeredocTerminator
  100. ValuesAndExpressions::ProhibitVersionStrings
  101. ValuesAndExpressions::RequireConstantVersion
  102. ValuesAndExpressions::RequireNumberSeparators
  103. ValuesAndExpressions::RequireQuotedHeredocTerminator
  104. ValuesAndExpressions::RequireUpperCaseHeredocTerminator
  105. Variables::ProhibitAugmentedAssignmentInDeclaration
  106. Variables::ProhibitConditionalDeclarations
  107. Variables::ProhibitLocalVars
  108. Variables::ProhibitMatchVars
  109. Variables::ProhibitPackageVars
  110. Variables::ProhibitPerl4PackageNames
  111. Variables::ProhibitUnusedVariables
  112. Variables::ProtectPrivateVars
  113. Variables::RequireLexicalLoopIterators
  114. Variables::RequireNegativeIndices
  115. );
  116. Test::Perl::Critic->import(
  117. -profile => 't/critic/perlcriticrc',
  118. -verbose => 8,
  119. -include => \@policies,
  120. -only => 1,
  121. );
  122. my @files = Test::Dpkg::all_perl_files();
  123. plan tests => scalar @files;
  124. for my $file (@files) {
  125. critic_ok($file);
  126. }