<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="pcsg-generated-ruleset">
    <description>PHP Code Sniffer</description>

    <arg name="colors"/>

    <rule ref="PSR2"/>

    <rule ref="Generic.CodeAnalysis.EmptyStatement"/>
    <rule ref="Generic.CodeAnalysis.UselessOverridingMethod"/>
    <rule ref="Generic.CodeAnalysis.UnusedFunctionParameter"/>
    <rule ref="Generic.CodeAnalysis.JumbledIncrementer"/>
    <rule ref="Generic.CodeAnalysis.UnconditionalIfStatement"/>
    <rule ref="Generic.CodeAnalysis.UnnecessaryFinalModifier"/>

    <rule ref="Generic.ControlStructures.InlineControlStructure"/>

    <rule ref="Generic.Files.ByteOrderMark"/>
    <rule ref="Generic.Files.LineEndings"/>

    <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
    <rule ref="Generic.Formatting.SpaceAfterCast.NoSpace">
        <type>warning</type>
    </rule>
    <rule ref="Generic.Functions.CallTimePassByReference"/>
    <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>

    <rule ref="Generic.Metrics.NestingLevel">
        <properties>
            <property name="nestingLevel" value="7"/>
        </properties>
    </rule>
    <rule ref="Generic.Metrics.CyclomaticComplexity">
        <properties>
            <property name="complexity" value="20"/>
            <property name="absoluteComplexity" value="40"/>
        </properties>
    </rule>
    <rule ref="Generic.Metrics.CyclomaticComplexity.TooHigh">
        <type>warning</type>
    </rule>
    <rule ref="Generic.Metrics.CyclomaticComplexity.MaxExceeded">
        <type>warning</type>
    </rule>

    <rule ref="Generic.NamingConventions.ConstructorName"/>
    <rule ref="Generic.NamingConventions.UpperCaseConstantName"/>
    <rule ref="Generic.NamingConventions.CamelCapsFunctionName"/>

    <rule ref="Generic.PHP.DeprecatedFunctions"/>
    <rule ref="Generic.PHP.DisallowShortOpenTag"/>
    <rule ref="Generic.PHP.ForbiddenFunctions"/>
    <rule ref="Generic.PHP.LowerCaseConstant"/>
    <rule ref="Generic.PHP.NoSilencedErrors"/>

    <rule ref="Generic.Strings.UnnecessaryStringConcat"/>

    <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
    <rule ref="Generic.WhiteSpace.ScopeIndent"/>

    <rule ref="Generic.Commenting.Todo.CommentFound">
        <message>Please review this TODO comment: %s</message>
        <type>warning</type>
    </rule>
    <rule ref="Generic.Commenting.Fixme.TaskFound">
        <message>Please review this FIXME comment: %s</message>
        <type>warning</type>
    </rule>

    <rule ref="Generic.Files.LineLength">
        <properties>
            <property name="lineLimit" value="120"/>
            <property name="absoluteLineLimit" value="200"/>
        </properties>
    </rule>
    <rule ref="Generic.Files.LineLength">
        <exclude name="Generic.Files.LineLength.MaxExceeded"/>
        <exclude name="Generic.Files.LineLength.TooLong"/>
    </rule>
    <!--
    <rule ref="Generic.Files.LineLength.MaxExceeded">
        <message>Line contains %s chars, which is longer than the max limit of %s</message>
        <type>warning</type>
    </rule>
    <rule ref="Generic.Files.LineLength.TooLong">
        <message>Line longer than %s characters; contains %s characters</message>
        <type>warning</type>
    </rule> -->
    <rule ref="Generic.Classes.DuplicateClassName"/>

    <rule ref="PEAR.Commenting.InlineComment"/>

    <rule ref="PEAR.ControlStructures.MultiLineCondition"/>

    <rule ref="PEAR.WhiteSpace.ObjectOperatorIndent"/>

    <rule ref="MySource.PHP.EvalObjectFactory"/>
    <rule ref="MySource.PHP.GetRequestData"/>
    <!--
    <rule ref="MySource.PHP.ReturnFunctionValue"/>
    -->

    <rule ref="Squiz.WhiteSpace.LogicalOperatorSpacing"/>
    <rule ref="Squiz.WhiteSpace.SemicolonSpacing"/>
    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines">
        <type>warning</type>
    </rule>
    <rule ref="Squiz.WhiteSpace.CastSpacing"/>
    <rule ref="Squiz.WhiteSpace.LanguageConstructSpacing"/>
    <!--
    <rule ref="Squiz.WhiteSpace.MemberVarSpacing"/>
    -->
    <rule ref="Squiz.WhiteSpace.OperatorSpacing"/>

    <rule ref="Squiz.Scope.StaticThisUsage"/>

</ruleset>
