<?xml version="1.0"?>
<psalm
    name="SimpleSAMLphp"
    useDocblockTypes="true"
    errorLevel="2"
    reportMixedIssues="false"
    hideExternalErrors="true"
    allowStringToStandInForClass="true"
>
    <projectFiles>
        <directory name="config" />
        <directory name="metadata" />
        <directory name="modules" />
        <directory name="public" />
        <directory name="src/SimpleSAML" />

        <!-- Ignore certain directories -->
        <ignoreFiles>
            <directory name="modules/adfs" />
            <directory name="vendor" />
        </ignoreFiles>
    </projectFiles>

    <issueHandlers>
        <LessSpecificReturnType errorLevel="info" />

        <!-- level 3 issues - slightly lazy code writing, but probably low false-negatives -->
        <DeprecatedClass errorLevel="info" />
        <DeprecatedMethod errorLevel="info" />

        <MissingClosureReturnType errorLevel="info" />
        <MissingReturnType errorLevel="info" />
        <MissingPropertyType errorLevel="info" />
        <InvalidDocblock errorLevel="info" />

        <PropertyNotSetInConstructor errorLevel="info" />
        <MissingConstructor errorLevel="info" />
        <MissingClosureParamType errorLevel="info" />
        <MissingParamType errorLevel="info" />
        <UnusedClass errorLevel="info" />
        <PossiblyUnusedMethod errorLevel="info" />

        <!-- Ignore these errors until we are fully typehinted -->
        <DocblockTypeContradiction errorLevel="suppress" />
        <RedundantConditionGivenDocblockType errorLevel="suppress" />

        <!-- Ignore UnresolvableInclude on CLI-scripts -->
        <UnresolvableInclude>
            <errorLevel type="suppress">
                <file name="bin/*.php" />
                <file name="modules/core/src/Auth/Process/AttributeMap.php" />
                <file name="modules/*/bin/*.php" />
                <file name="src/SimpleSAML/Configuration.php" />
                <file name="src/SimpleSAML/Metadata/MetaDataStorageHandlerFlatFile.php" />
                <file name="src/SimpleSAML/Module.php" />
                <file name="src/SimpleSAML/XHTML/Template.php" />
            </errorLevel>
        </UnresolvableInclude>

        <!-- Ignore MissingFile on public-scripts - Remove when the last public-script is replaced by a controller -->
        <MissingFile>
            <errorLevel type="suppress">
                <file name="public/*.php" />
            </errorLevel>
        </MissingFile>

        <!-- Suppress PossiblyUndefinedGlobalVariable on templates -->
        <PossiblyUndefinedGlobalVariable>
            <errorLevel type="suppress">
                <directory name="config" />
                <directory name="metadata" />
                <directory name="modules/adfs/metadata" />
            </errorLevel>
        </PossiblyUndefinedGlobalVariable>
    </issueHandlers>

    <stubs>
        <file name="vendor/simplesamlphp/simplesamlphp-test-framework/stubs/krb5.php" />
        <file name="vendor/simplesamlphp/simplesamlphp-test-framework/stubs/memcache.php" />
        <file name="vendor/simplesamlphp/simplesamlphp-test-framework/stubs/memcached.php" />
        <file name="vendor/simplesamlphp/simplesamlphp-test-framework/stubs/predis.php" />
    </stubs>
</psalm>