#
# Perl::Critic configuration file for Perl Node Interface.
#
# There are four themes: all, controller, nodes, model
#

force = 1
only = 1
top = 5
verbose = 5

color-severity-highest = bold red underline
color-severity-high = bold magenta
color-severity-medium = blue

# 5 Bangs::ProhibitBitwiseOperators [bugs core]
# 2 Bangs::ProhibitCommentedOutCode [bangs maintenance]

# 2 Bangs::ProhibitFlagComments [bangs maintenance]
# TODO turn it on !
[Bangs::ProhibitFlagComments]
#add_themes = all
add_themes = tests

# 2 Bangs::ProhibitNoPlan [bangs tests]
[Bangs::ProhibitNoPlan]
add_themes = tests

# 3 Bangs::ProhibitNumberedNames [bangs maintenance]
[Bangs::ProhibitNumberedNames]
add_themes = model

# 4 Bangs::ProhibitRefProtoOrProto [bangs complexity]
# 4 Bangs::ProhibitUselessRegexModifiers [bangs bugs]
# 3 Bangs::ProhibitVagueNames [bangs readability]

# 2 BuiltinFunctions::ProhibitBooleanGrep [core pbp performance]
# 3 BuiltinFunctions::ProhibitComplexMappings [complexity core maintenance pbp]
# 3 BuiltinFunctions::ProhibitLvalueSubstr [core maintenance pbp]
# 1 BuiltinFunctions::ProhibitReverseSortBlock [core cosmetic pbp]
# 5 BuiltinFunctions::ProhibitSleepViaSelect [bugs core pbp]
# 5 BuiltinFunctions::ProhibitStringyEval [bugs core pbp]
# 2 BuiltinFunctions::ProhibitStringySplit [core cosmetic pbp]
# 3 BuiltinFunctions::ProhibitUniversalCan [core maintenance]
# 3 BuiltinFunctions::ProhibitUniversalIsa [core maintenance]
# 3 BuiltinFunctions::ProhibitVoidGrep [core maintenance]
# 3 BuiltinFunctions::ProhibitVoidMap [core maintenance]
# 4 BuiltinFunctions::RequireBlockGrep [bugs core pbp]
# 4 BuiltinFunctions::RequireBlockMap [bugs core pbp]
# 5 BuiltinFunctions::RequireGlobFunction [bugs core pbp]
# 3 BuiltinFunctions::RequireSimpleSortBlock [complexity core maintenance pbp]

# 3 ClassHierarchies::ProhibitAutoloading [core maintenance pbp]
[ClassHierarchies::ProhibitAutoloading]
add_themes = model, nodes

# 3 ClassHierarchies::ProhibitExplicitISA [core maintenance pbp]
# 5 ClassHierarchies::ProhibitOneArgBless [bugs core pbp]

# 3 CodeLayout::ProhibitHardTabs [core cosmetic pbp]
[CodeLayout::ProhibitHardTabs]
add_themes = all

# 1 CodeLayout::ProhibitParensWithBuiltins [core cosmetic pbp]
# 2 CodeLayout::ProhibitQuotedWordLists [core cosmetic]
# 1 CodeLayout::ProhibitTrailingWhitespace [core maintenance]
# 4 CodeLayout::RequireConsistentNewlines [bugs core]

# 1 CodeLayout::RequireTidyCode [core cosmetic pbp]
[CodeLayout::RequireTidyCode]
add_themes = all

# 1 CodeLayout::RequireTrailingCommas [core cosmetic pbp]

# 2 ControlStructures::ProhibitCStyleForLoops [core maintenance pbp]
# 3 ControlStructures::ProhibitCascadingIfElse [complexity core maintenance pbp]
# 3 ControlStructures::ProhibitDeepNests [complexity core maintenance]
# 4 ControlStructures::ProhibitLabelsWithSpecialBlockNames [bugs core]
# 5 ControlStructures::ProhibitMutatingListFunctions [bugs core pbp]
# 3 ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditions [core maintenance pbp]
# 2 ControlStructures::ProhibitPostfixControls [core cosmetic pbp]
# 2 ControlStructures::ProhibitUnlessBlocks [core cosmetic pbp]
# 4 ControlStructures::ProhibitUnreachableCode [bugs core]
# 2 ControlStructures::ProhibitUntilBlocks [core cosmetic pbp]

# 1 Documentation::RequirePackageMatchesPodName [core cosmetic]
[Documentation::RequirePackageMatchesPodName]
add_themes = model, controller

# 1 Documentation::RequirePodAtEnd [core cosmetic pbp]
[Documentation::RequirePodAtEnd]
add_themes = model

# 2 Documentation::RequirePodLinksIncludeText [core maintenance]

# 2 Documentation::RequirePodSections [core maintenance pbp]
[-Documentation::RequirePodSections]
add_themes = model
lib_sections = NAME | SYNOPSIS | DESCRIPTION

# 3 ErrorHandling::RequireCarping [core maintenance pbp]
# 3 ErrorHandling::RequireCheckingReturnValueOfEval [bugs core]

# 3 InputOutput::ProhibitBacktickOperators [core maintenance]
# 5 InputOutput::ProhibitBarewordFileHandles [bugs core pbp]
# 4 InputOutput::ProhibitExplicitStdin [core maintenance pbp]
# 5 InputOutput::ProhibitInteractiveTest [bugs core pbp]
# 3 InputOutput::ProhibitJoinedReadline [core pbp performance]
# 4 InputOutput::ProhibitOneArgSelect [bugs core pbp]
# 4 InputOutput::ProhibitReadlineInForLoop [bugs core pbp]
# 5 InputOutput::ProhibitTwoArgOpen [bugs core pbp security]
# 1 InputOutput::RequireBracedFileHandleWithPrint [core cosmetic pbp]
# 4 InputOutput::RequireBriefOpen [core maintenance pbp]
# 2 InputOutput::RequireCheckedClose [core maintenance]
# 3 InputOutput::RequireCheckedOpen [core maintenance]
# 1 InputOutput::RequireCheckedSyscalls [core maintenance]
# 5 InputOutput::RequireEncodingWithUTF8Layer [bugs core security]

# 3 Miscellanea::ProhibitFormats [core maintenance pbp]
# 2 Miscellanea::ProhibitTies [core maintenance pbp]
# 3 Miscellanea::ProhibitUnrestrictedNoCritic [core maintenance]
# 2 Miscellanea::ProhibitUselessNoCritic [core maintenance]
# 2 Miscellanea::RequireRcsKeywords [core cosmetic pbp]
# 4 Modules::ProhibitAutomaticExportation [bugs core]
# 3 Modules::ProhibitConditionalUseStatements [bugs core]
# 5 Modules::ProhibitEvilModules [bugs core]

# 3 Modules::ProhibitExcessMainComplexity [complexity core maintenance]
[Modules::ProhibitExcessMainComplexity]
add_themes = model, nodes, controller

# 4 Modules::ProhibitMultiplePackages [bugs core]
[Modules::ProhibitMultiplePackages]
add_themes = model, nodes

# 5 Modules::RequireBarewordIncludes [core portability]

# 4 Modules::RequireEndWithOne [bugs core pbp]
[Modules::RequireEndWithOne]
add_themes = model, controller, nodes

# 4 Modules::RequireExplicitPackage [bugs core]
[Modules::RequireExplicitPackage]
add_themes = model, nodes

# 5 Modules::RequireFilenameMatchesPackage [bugs core]
[Modules::RequireFilenameMatchesPackage]
add_themes = model, nodes

# 2 Modules::RequireNoMatchVarsWithUseEnglish [core performance]
# 2 Modules::RequireVersionVar [core pbp readability]

# 1 NamingConventions::Capitalization [core cosmetic pbp]
[NamingConventions::Capitalization]
add_themes = all

# 3 NamingConventions::ProhibitAmbiguousNames [core maintenance pbp]
[NamingConventions::ProhibitAmbiguousNames]
add_themes = controller, model, nodes

# 4 Objects::ProhibitIndirectSyntax [core maintenance pbp]
[Objects::ProhibitIndirectSyntax]
add_themes = all

# 2 References::ProhibitDoubleSigils [core cosmetic pbp]
[References::ProhibitDoubleSigils]
add_themes = all

# 3 RegularExpressions::ProhibitCaptureWithoutTest [core maintenance pbp]
# 3 RegularExpressions::ProhibitComplexRegexes [core maintenance pbp]
# 1 RegularExpressions::ProhibitEnumeratedClasses [core cosmetic pbp unicode]
# 1 RegularExpressions::ProhibitEscapedMetacharacters [core cosmetic pbp]
# 2 RegularExpressions::ProhibitFixedStringMatches [core pbp performance]
# 1 RegularExpressions::ProhibitSingleCharAlternation [core pbp performance]

# 3 RegularExpressions::ProhibitUnusedCapture [core maintenance pbp]
[RegularExpressions::ProhibitUnusedCapture]
add_themes = nodes

# 1 RegularExpressions::ProhibitUnusualDelimiters [core cosmetic pbp]
# 1 RegularExpressions::RequireBracesForMultiline [core cosmetic pbp]

# 2 RegularExpressions::RequireDotMatchAnything [core cosmetic pbp]
[RegularExpressions::RequireDotMatchAnything]
add_themes = nodes

# 3 RegularExpressions::RequireExtendedFormatting [core maintenance pbp]
# 2 RegularExpressions::RequireLineBoundaryMatching [core cosmetic pbp]
# 2 Subroutines::ProhibitAmpersandSigils [core maintenance pbp]

# 4 Subroutines::ProhibitBuiltinHomonyms [bugs core pbp]
[-Subroutines::ProhibitBuiltinHomonyms]
# TODO turn it on !
add_themes = all

# 3 Subroutines::ProhibitExcessComplexity [complexity core maintenance]
[Subroutines::ProhibitExcessComplexity]
add_themes = all

# 5 Subroutines::ProhibitExplicitReturnUndef [bugs core pbp]
[Subroutines::ProhibitExplicitReturnUndef]
add_themes = all

# 3 Subroutines::ProhibitManyArgs [core maintenance pbp]
[Subroutines::ProhibitManyArgs]
add_themes = all

# 5 Subroutines::ProhibitNestedSubs [bugs core]
# 5 Subroutines::ProhibitReturnSort [bugs core]
# 5 Subroutines::ProhibitSubroutinePrototypes [bugs core pbp]

# 3 Subroutines::ProhibitUnusedPrivateSubroutines [core maintenance]
[Subroutines::ProhibitUnusedPrivateSubroutines]
add_themes = all

# 3 Subroutines::ProtectPrivateSubs [core maintenance]
# 4 Subroutines::RequireArgUnpacking [core maintenance pbp]

# 4 Subroutines::RequireFinalReturn [bugs core pbp]
[Subroutines::RequireFinalReturn]
add_themes = model

# 5 TestingAndDebugging::ProhibitNoStrict [bugs core pbp]
[TestingAndDebugging::ProhibitNoStrict]
add_themes = all

# 4 TestingAndDebugging::ProhibitNoWarnings [bugs core pbp]
[TestingAndDebugging::ProhibitNoWarnings]
add_themes = all

# 4 TestingAndDebugging::ProhibitProlongedStrictureOverride [bugs core pbp]
[TestingAndDebugging::ProhibitProlongedStrictureOverride]
add_themes = all

# 3 TestingAndDebugging::RequireTestLabels [core maintenance tests]
[TestingAndDebugging::RequireTestLabels]

# 5 TestingAndDebugging::RequireUseStrict [bugs core pbp]
[TestingAndDebugging::RequireUseStrict]
add_themes = all
equivalent_modules = PNI::Mo PNI::Node::Mo Mojo::Base

# 4 TestingAndDebugging::RequireUseWarnings [bugs core pbp]
[TestingAndDebugging::RequireUseWarnings]
add_themes = all
equivalent_modules = PNI::Mo PNI::Node::Mo Mojo::Base

# 4 ValuesAndExpressions::ProhibitCommaSeparatedStatements [bugs core pbp]
# 3 ValuesAndExpressions::ProhibitComplexVersion [core maintenance]
# 4 ValuesAndExpressions::ProhibitConstantPragma [bugs core pbp]
# 2 ValuesAndExpressions::ProhibitEmptyQuotes [core cosmetic pbp]
# 2 ValuesAndExpressions::ProhibitEscapedCharacters [core cosmetic pbp]
# 3 ValuesAndExpressions::ProhibitImplicitNewlines [core cosmetic pbp]
# 1 ValuesAndExpressions::ProhibitInterpolationOfLiterals [core cosmetic pbp]
# 5 ValuesAndExpressions::ProhibitLeadingZeros [bugs core pbp]
# 2 ValuesAndExpressions::ProhibitLongChainsOfMethodCalls [core maintenance]
# 2 ValuesAndExpressions::ProhibitMagicNumbers [core maintenance]
# 3 ValuesAndExpressions::ProhibitMismatchedOperators [bugs core]
# 4 ValuesAndExpressions::ProhibitMixedBooleanOperators [bugs core pbp]
# 2 ValuesAndExpressions::ProhibitNoisyQuotes [core cosmetic pbp]
# 3 ValuesAndExpressions::ProhibitQuotesAsQuotelikeOperatorDelimiters [core maintenance]
# 3 ValuesAndExpressions::ProhibitSpecialLiteralHeredocTerminator [core maintenance]
# 3 ValuesAndExpressions::ProhibitVersionStrings [core maintenance pbp]
# 2 ValuesAndExpressions::RequireConstantVersion [core maintenance]
# 1 ValuesAndExpressions::RequireInterpolationOfMetachars [core cosmetic pbp]
# 2 ValuesAndExpressions::RequireNumberSeparators [core cosmetic pbp]
# 3 ValuesAndExpressions::RequireQuotedHeredocTerminator [core maintenance pbp]
# 2 ValuesAndExpressions::RequireUpperCaseHeredocTerminator [core cosmetic pbp]

# 4 Variables::ProhibitAugmentedAssignmentInDeclaration [bugs core]
# 5 Variables::ProhibitConditionalDeclarations [bugs core]
# 2 Variables::ProhibitLocalVars [core maintenance pbp]
# 4 Variables::ProhibitMatchVars [core pbp performance]
# 3 Variables::ProhibitPackageVars [core maintenance pbp]
# 2 Variables::ProhibitPerl4PackageNames [core maintenance]
# 2 Variables::ProhibitPunctuationVars [core cosmetic pbp]
# 3 Variables::ProhibitReusedNames [bugs core]
# 3 Variables::ProhibitUnusedVariables [core maintenance]
# 3 Variables::ProtectPrivateVars [core maintenance]
# 3 Variables::RequireInitializationForLocalVars [bugs core pbp]
# 5 Variables::RequireLexicalLoopIterators [bugs core pbp]
# 4 Variables::RequireLocalizedPunctuationVars [bugs core pbp]
# 4 Variables::RequireNegativeIndices [core maintenance pbp]

