theme = core + pbp + cosmetic + bugs + maintenance + complexity + security

# While there's good reason to not use subroutine prototypes, ikiwiki does
# use them, and changing away from them could lead to subtle bugs in stuff
# using the library. So for now, demote errors about them.
[Subroutines::ProhibitSubroutinePrototypes]
severity = 1

# Nice to have, but low priority. I do it for the hairy regexps.
[RegularExpressions::RequireExtendedFormatting]
severity = 1

# ProhibitStringyEval doesn't take into account that eval q{use Foo};
# defers the use until the eval runs, which is often a useful optimisation.
# While eval {use Foo}; does not defer the use at all.
[-BuiltinFunctions::ProhibitStringyEval]

# ikiwiki uses the method of switching other files to the IkiWiki package
# when they are part of the core program. I don't plan to have more than
# the one exporting module in IkiWiki, so let's ignore this test.
[-Modules::RequireFilenameMatchesPackage]
# IkiWIki also switches _out_ of the core package when a package namespace
# is a good way to group a set of functions. This doesn't mean I want it
# loading up a separate file though, so it's in the same file.
[-Modules::ProhibitMultiplePackages]

# ikiwiki uses this when it makes sense, ie, for conditional variable
# localisation.
[-Variables::ProhibitConditionalDeclarations]

# IkiWiki exports symbols, and uses globals, if it's bad form, that's too
# bad. :-)
[-Modules::ProhibitAutomaticExportation]
[-Variables::ProhibitPackageVars]

# Stylistic checks that I don't agree with. Larry put both forms there for
# a reason; both forms can be abused.
[-BuiltinFunctions::RequireBlockGrep]
[-BuiltinFunctions::RequireBlockMap]
[-Variables::ProhibitPunctuationVars]
[-ControlStructures::ProhibitPostfixControls]

# Sadly doesn't match my coding style.
[-CodeLayout::ProhibitHardTabs]

# Sillyness.
[-Miscellanea::RequireRcsKeywords]

# Sadly, perl doesn't offer a builtin better way in many cases.
[-ControlStructures::ProhibitCascadingIfElse]

# Good god, man, it's perl. Get over it!
[-ValuesAndExpressions::ProhibitNoisyQuotes]
[-ValuesAndExpressions::ProhibitEmptyQuotes]
[-RegularExpressions::RequireLineBoundaryMatching]

# When I use local vars, I have a damn good reason.
# (A shower after with lots of strong soap is also a nice thing.)
[-Variables::ProhibitLocalVars]