theme = community + openqa + core
severity = 1
exclude = BuiltinFunctions::ProhibitBooleanGrep BuiltinFunctions::ProhibitComplexMappings BuiltinFunctions::ProhibitReverseSortBlock BuiltinFunctions::ProhibitVoidMap ClassHierarchies::ProhibitAutoloading CodeLayout::RequireTrailingCommas Community::DiscouragedModules Community::Prototypes ControlStructures::ProhibitCStyleForLoops ControlStructures::ProhibitMutatingListFunctions ControlStructures::ProhibitPostfixControls ControlStructures::ProhibitUnlessBlocks ControlStructures::ProhibitUntilBlocks Documentation::PodSpelling Documentation::RequirePodAtEnd Documentation::RequirePodSections ErrorHandling::RequireCarping InputOutput::ProhibitBacktickOperators InputOutput::ProhibitExplicitStdin InputOutput::ProhibitInteractiveTest InputOutput::ProhibitJoinedReadline InputOutput::RequireBracedFileHandleWithPrint InputOutput::RequireBriefOpen InputOutput::RequireCheckedClose InputOutput::RequireCheckedOpen InputOutput::RequireCheckedSyscalls Miscellanea::ProhibitTies Modules::ProhibitMultiplePackages Modules::RequireBarewordIncludes Modules::RequireEndWithOne Modules::RequireExplicitPackage Modules::RequireFilenameMatchesPackage Modules::RequireNoMatchVarsWithUseEnglish Modules::RequireVersionVar NamingConventions::Capitalization NamingConventions::ProhibitAmbiguousNames References::ProhibitDoubleSigils RegularExpressions::ProhibitCaptureWithoutTest RegularExpressions::ProhibitComplexRegexes RegularExpressions::ProhibitEnumeratedClasses RegularExpressions::ProhibitEscapedMetacharacters RegularExpressions::ProhibitFixedStringMatches RegularExpressions::ProhibitUnusedCapture RegularExpressions::ProhibitUnusualDelimiters RegularExpressions::RequireBracesForMultiline RegularExpressions::RequireDotMatchAnything RegularExpressions::RequireExtendedFormatting RegularExpressions::RequireLineBoundaryMatching Subroutines::ProhibitBuiltinHomonyms Subroutines::ProhibitExplicitReturnUndef Subroutines::ProhibitSubroutinePrototypes Subroutines::ProhibitUnusedPrivateSubroutines Subroutines::ProtectPrivateSubs Subroutines::RequireFinalReturn ValuesAndExpressions::ProhibitCommaSeparatedStatements ValuesAndExpressions::ProhibitConstantPragma ValuesAndExpressions::ProhibitEmptyQuotes ValuesAndExpressions::ProhibitEscapedCharacters ValuesAndExpressions::ProhibitImplicitNewlines ValuesAndExpressions::ProhibitLeadingZeros ValuesAndExpressions::ProhibitLongChainsOfMethodCalls ValuesAndExpressions::ProhibitMagicNumbers ValuesAndExpressions::ProhibitMismatchedOperators ValuesAndExpressions::ProhibitMixedBooleanOperators ValuesAndExpressions::ProhibitNoisyQuotes ValuesAndExpressions::RequireConstantVersion ValuesAndExpressions::RequireInterpolationOfMetachars Variables::ProhibitAugmentedAssignmentInDeclaration Variables::ProhibitLocalVars Variables::ProhibitPunctuationVars Variables::ProhibitReusedNames Variables::RequireInitializationForLocalVars Variables::RequireLocalizedPunctuationVars

# ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditions
# No operators like < =~ ! allowed in 'unless' or 'until', only simple
# unless $x && @$y

verbose = ::warning file=%f,line=%l,col=%c,title=%m - severity %s::[%p] %e\n

# == Perlcritic Policies
# -- Test::Most brings in strict & warnings
[TestingAndDebugging::RequireUseStrict]
equivalent_modules = Test::Most

[TestingAndDebugging::RequireUseWarnings]
equivalent_modules = Test::Most

# -- Avoid double quotes unless there's interpolation or a single quote.
[ValuesAndExpressions::ProhibitInterpolationOfLiterals]
allow_if_string_contains_single_quote = 1
severity = 3

# -- Prohibit deep nesting
[ControlStructures::ProhibitDeepNests]
severity = 4
add_themes = community
max_nests = 4

# -- Test::Most brings in strict & warnings
[Community::StrictWarnings]
extra_importers = Test::Most

[Community::DiscouragedModules]
severity = 3

# Test modules have no package declaration
[Community::PackageMatchesFilename]
severity = 1

# == Custom Policies
# -- Useless quotes on hashes
[OpenQA::HashKeyQuotes]
severity = 5

# -- Superfluous use strict/warning.
[OpenQA::RedundantStrictWarning]
equivalent_modules = Test::Most

[ValuesAndExpressions::RequireNumberSeparators]
min_value = 1000000

[Variables::ProhibitPackageVars]
add_packages = Config::IniFiles

[Community::DiscouragedModules]
allowed_modules = FindBin

[TestingAndDebugging::ProhibitNoWarnings]
allow = redefine

# The following policies might be interesting:
# InputOutput::ProhibitInteractiveTest
# InputOutput::ProhibitExplicitStdin
# BuiltinFunctions::ProhibitComplexMappings
# RegularExpressions::ProhibitUnusedCapture

# The following thresholds should ideally be reduced
# https://progress.opensuse.org/issues/201318
[Modules::ProhibitExcessMainComplexity]
# Reduce me!
max_mccabe = 83

[ControlStructures::ProhibitCascadingIfElse]
# Reduce me!
max_elsif = 5

[Subroutines::ProhibitExcessComplexity]
# Reduce me!
max_mccabe = 63

[Subroutines::ProhibitManyArgs]
# Reduce me!
max_arguments = 10
# Ignore first arg if called $self or $class
skip_object = 1
