diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 18:35:28 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 18:35:28 +0000 |
commit | ea314d2f45c40a006c0104157013ab4b857f665f (patch) | |
tree | 3ef2971cb3675c318b8d9effd987854ad3f6d3e8 /t/critic | |
parent | Initial commit. (diff) | |
download | dpkg-ea314d2f45c40a006c0104157013ab4b857f665f.tar.xz dpkg-ea314d2f45c40a006c0104157013ab4b857f665f.zip |
Adding upstream version 1.22.4.upstream/1.22.4
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | t/critic.t | 140 | ||||
-rw-r--r-- | t/critic/perlcriticrc | 135 |
2 files changed, 275 insertions, 0 deletions
diff --git a/t/critic.t b/t/critic.t new file mode 100644 index 0000000..f205877 --- /dev/null +++ b/t/critic.t @@ -0,0 +1,140 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More; +use Test::Dpkg qw(:needs); + +test_needs_author(); +test_needs_module('Test::Perl::Critic'); +test_needs_srcdir_switch(); + +my @policies = qw( + BuiltinFunctions::ProhibitBooleanGrep + BuiltinFunctions::ProhibitLvalueSubstr + BuiltinFunctions::ProhibitReverseSortBlock + BuiltinFunctions::ProhibitShiftRef + BuiltinFunctions::ProhibitSleepViaSelect + BuiltinFunctions::ProhibitStringySplit + BuiltinFunctions::ProhibitUniversalCan + BuiltinFunctions::ProhibitUniversalIsa + BuiltinFunctions::ProhibitUselessTopic + BuiltinFunctions::ProhibitVoidGrep + BuiltinFunctions::ProhibitVoidMap + BuiltinFunctions::RequireBlockGrep + BuiltinFunctions::RequireBlockMap + BuiltinFunctions::RequireGlobFunction + BuiltinFunctions::RequireSimpleSortBlock + ClassHierarchies::ProhibitAutoloading + ClassHierarchies::ProhibitExplicitISA + ClassHierarchies::ProhibitOneArgBless + CodeLayout::ProhibitHardTabs + CodeLayout::ProhibitQuotedWordLists + CodeLayout::ProhibitTrailingWhitespace + CodeLayout::RequireConsistentNewlines + ControlStructures::ProhibitCStyleForLoops + ControlStructures::ProhibitLabelsWithSpecialBlockNames + ControlStructures::ProhibitMutatingListFunctions + ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditions + ControlStructures::ProhibitUntilBlocks + ControlStructures::ProhibitYadaOperator + Documentation::RequirePackageMatchesPodName + Documentation::RequirePodSections + InputOutput::ProhibitBacktickOperators + InputOutput::ProhibitBarewordDirHandles + InputOutput::ProhibitBarewordFileHandles + InputOutput::ProhibitInteractiveTest + InputOutput::ProhibitJoinedReadline + InputOutput::ProhibitOneArgSelect + InputOutput::ProhibitReadlineInForLoop + InputOutput::ProhibitTwoArgOpen + InputOutput::RequireBracedFileHandleWithPrint + InputOutput::RequireCheckedOpen + InputOutput::RequireEncodingWithUTF8Layer + Miscellanea::ProhibitFormats + Miscellanea::ProhibitTies + Miscellanea::ProhibitUnrestrictedNoCritic + Miscellanea::ProhibitUselessNoCritic + Modules::ProhibitConditionalUseStatements + Modules::ProhibitEvilModules + Modules::ProhibitMultiplePackages + Modules::RequireBarewordIncludes + Modules::RequireEndWithOne + Modules::RequireExplicitPackage + Modules::RequireFilenameMatchesPackage + NamingConventions::Capitalization + NamingConventions::ProhibitAmbiguousNames + Objects::ProhibitIndirectSyntax + RegularExpressions::ProhibitCaptureWithoutTest + RegularExpressions::ProhibitSingleCharAlternation + RegularExpressions::ProhibitUnusedCapture + RegularExpressions::ProhibitUnusualDelimiters + RegularExpressions::ProhibitUselessTopic + RegularExpressions::RequireBracesForMultiline + RegularExpressions::RequireExtendedFormatting + Subroutines::ProhibitAmpersandSigils + Subroutines::ProhibitExplicitReturnUndef + Subroutines::ProhibitManyArgs + Subroutines::ProhibitNestedSubs + Subroutines::ProhibitReturnSort + Subroutines::ProhibitUnusedPrivateSubroutines + Subroutines::ProtectPrivateSubs + Subroutines::RequireArgUnpacking + TestingAndDebugging::ProhibitNoStrict + TestingAndDebugging::ProhibitNoWarnings + TestingAndDebugging::ProhibitProlongedStrictureOverride + TestingAndDebugging::RequireTestLabels + TestingAndDebugging::RequireUseStrict + TestingAndDebugging::RequireUseWarnings + ValuesAndExpressions::ProhibitCommaSeparatedStatements + ValuesAndExpressions::ProhibitComplexVersion + ValuesAndExpressions::ProhibitInterpolationOfLiterals + ValuesAndExpressions::ProhibitLongChainsOfMethodCalls + ValuesAndExpressions::ProhibitMismatchedOperators + ValuesAndExpressions::ProhibitMixedBooleanOperators + ValuesAndExpressions::ProhibitQuotesAsQuotelikeOperatorDelimiters + ValuesAndExpressions::ProhibitSpecialLiteralHeredocTerminator + ValuesAndExpressions::ProhibitVersionStrings + ValuesAndExpressions::RequireConstantVersion + ValuesAndExpressions::RequireQuotedHeredocTerminator + ValuesAndExpressions::RequireUpperCaseHeredocTerminator + Variables::ProhibitAugmentedAssignmentInDeclaration + Variables::ProhibitConditionalDeclarations + Variables::ProhibitLocalVars + Variables::ProhibitMatchVars + Variables::ProhibitPackageVars + Variables::ProhibitPerl4PackageNames + Variables::ProhibitUnusedVariables + Variables::ProtectPrivateVars + Variables::RequireLexicalLoopIterators + Variables::RequireNegativeIndices +); + +Test::Perl::Critic->import( + -profile => 't/critic/perlcriticrc', + -verbose => 8, + -include => \@policies, + -only => 1, +); + +my @files = Test::Dpkg::all_perl_files(); + +plan tests => scalar @files; + +for my $file (@files) { + critic_ok($file); +} diff --git a/t/critic/perlcriticrc b/t/critic/perlcriticrc new file mode 100644 index 0000000..6bdebc0 --- /dev/null +++ b/t/critic/perlcriticrc @@ -0,0 +1,135 @@ +## Perl Critic configuration file +severity = 1 +verbose = %f %l:%c (Severity: %s)\n %P (%s)\n near '%r'\n%d\n +program-extensions = .pl .t + +## +## Tune tests +## + +[Documentation::RequirePodSections] +lib_sections = NAME | DESCRIPTION | CHANGES +script_sections = NAME | SYNOPSIS | DESCRIPTION + +[InputOutput::ProhibitBacktickOperators] +# TODO: Add new Dpkg::Program module and switch those to it ? +only_in_void_context = 1 + +[NamingConventions::ProhibitAmbiguousNames] +# Allow set(), which is the common name for a setter. +forbid = abstract bases close contract last left no record right second + +[RegularExpressions::ProhibitUnusualDelimiters] +allow_all_brackets = 1 + +[RegularExpressions::RequireBracesForMultiline] +allow_all_brackets = 1 + +[RegularExpressions::RequireExtendedFormatting] +minimum_regex_length_to_complain_about = 60 + +[Subroutines::RequireArgUnpacking] +allow_delegation_to = new clone + +[ValuesAndExpressions::ProhibitInterpolationOfLiterals] +# TODO: Switch these to q{} ? +allow_if_string_contains_single_quote = 1 + +## +## Disable tests +## + +# Here complex is meant as long, but long is not necessarily complex. +[-BuiltinFunctions::ProhibitComplexMappings] + +# Needed when generating code. +[-BuiltinFunctions::ProhibitStringyEval] + +# BUG: Bogus check. +[-Documentation::PodSpelling] + +# While this might be good for performance, it is bad for keeping docs updated. +[-Documentation::RequirePodAtEnd] + +# Too many false positives. +[-CodeLayout::RequireTidyCode] + +# Forcing this just turns into noise (depending on the context, it makes sense). +[-CodeLayout::RequireTrailingCommas] + +# These are fine, and given/when are marked as experimental. +[-ControlStructures::ProhibitCascadingIfElse] + +# These are fine, and too many in the code base anyway. +[-ControlStructures::ProhibitPostfixControls] + +# These are fine, usually as long as they are not double negations. +[-ControlStructures::ProhibitUnlessBlocks] + +# BUG: Too many false positives. +[-ControlStructures::ProhibitUnreachableCode] + +# Not relevant anymore, the mentioned problems were fixed in Perl 5.14. +[-ErrorHandling::RequireCheckingReturnValueOfEval] + +# Needed, using <>/<@ARGV> is not correct, Prompt is not a core module. +[-InputOutput::ProhibitExplicitStdin] + +# TODO: Maybe, some of these are part of the public/current API. +[-Modules::ProhibitAutomaticExportation] + +# Here complex is meant as long, but long is not necessarily complex. +[-Modules::ProhibitExcessMainComplexity] + +# BUG: Too many false positives; non-modules all trigger. +[-Modules::RequireVersionVar] + +# We work primarily with ASCII, so we need to specify the exact characters +# to match. +[-RegularExpressions::ProhibitEnumeratedClasses] + +# When . is used in the code it means what it does. +[-RegularExpressions::RequireDotMatchAnything] + +# When ^ or $ are used in the code they mean what they do. +[-RegularExpressions::RequireLineBoundaryMatching] + +# TODO: While valid, these are part of the public/current API. +[-Subroutines::ProhibitBuiltinHomonyms] + +# TODO: Needed but we should switch away, and with perl 5.36 use signatures. +[-Subroutines::ProhibitSubroutinePrototypes] + +# Adding these seems like more noise. +[-Subroutines::RequireFinalReturn] + +# Readers need to know perl, English module is worse. +[-Variables::ProhibitPunctuationVars] +[-Modules::RequireNoMatchVarsWithUseEnglish] + +# Readers need to know perl. +[-Variables::RequireInitializationForLocalVars] + +# BUG: Too many false positives; on ::main and for $ENV, $SIG, $?, $a, $b. +[-Variables::RequireLocalizedPunctuationVars] + +# Readonly is not a core module. +[-ValuesAndExpressions::ProhibitConstantPragma] + +# TODO: Check it out, using other quotes might be less readable and uniform. +[-ValuesAndExpressions::ProhibitEmptyQuotes] + +# Using charnames is less clear. +[-ValuesAndExpressions::ProhibitEscapedCharacters] + +# Used for help output. +[-ValuesAndExpressions::ProhibitImplicitNewlines] + +# TODO: Octals are fine, but revisit with perl 5.34 octal syntax 0o<nnnn>. +[-ValuesAndExpressions::ProhibitLeadingZeros] + +# TODO: Check it out, some magic numbers are fine, octals for example. +[-ValuesAndExpressions::ProhibitMagicNumbers] + +# BUG: False positives on long hex numbers, even when separated. +[-ValuesAndExpressions::RequireNumberSeparators] |