<?xml version="1.0"?>
<psalm
    errorLevel="1"
    phpVersion="8.3"
    resolveFromConfigFile="true"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="https://getpsalm.org/schema/config"
    xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
    findUnusedBaselineEntry="true"
    findUnusedCode="true"
>
    <projectFiles>
        <directory name="src"/>
        <directory name="tests"/>
        <ignoreFiles>
            <directory name="vendor"/>
        </ignoreFiles>
    </projectFiles>
    <plugins>
        <pluginClass class="Psalm\PhpUnitPlugin\Plugin"/>
    </plugins>
    <issueHandlers>
        <InvalidReturnStatement>
            <errorLevel type="suppress">
                <!-- https://github.com/vimeo/psalm/issues/8878 -->
                <file name="src/AbstractLexer.php" />
            </errorLevel>
        </InvalidReturnStatement>
        <InvalidReturnType>
            <errorLevel type="suppress">
                <!-- https://github.com/vimeo/psalm/issues/8878 -->
                <file name="src/AbstractLexer.php" />
            </errorLevel>
        </InvalidReturnType>
        <MixedAssignment>
            <errorLevel type="suppress">
                <file name="src/AbstractLexer.php" />
            </errorLevel>
        </MixedAssignment>
        <MixedReturnStatement>
            <errorLevel type="suppress">
                <file name="src/AbstractLexer.php" />
                <file name="src/Token.php" />
            </errorLevel>
        </MixedReturnStatement>
        <PossiblyUnusedMethod>
            <errorLevel type="suppress">
                <!-- https://github.com/psalm/psalm-plugin-phpunit/issues/131 -->
                <file name="tests/AbstractLexerTest.php" />
            </errorLevel>
        </PossiblyUnusedMethod>
        <PossiblyUnusedProperty>
            <errorLevel type="suppress">
                <!-- TODO: Cover this property in a test -->
                <referencedProperty name="Doctrine\Common\Lexer\Token::$position"/>
            </errorLevel>
        </PossiblyUnusedProperty>
        <ReferenceConstraintViolation>
            <errorLevel type="suppress">
                <!-- https://github.com/vimeo/psalm/issues/8891 -->
                <file name="src/AbstractLexer.php" />
                <file name="tests/EnumLexer.php" />
            </errorLevel>
        </ReferenceConstraintViolation>
        <RedundantConditionGivenDocblockType>
            <errorLevel type="suppress">
                <!-- that test checks non-obvious things guaranteed by static analysis, just in case -->
                <file name="tests/AbstractLexerTest.php" />
            </errorLevel>
        </RedundantConditionGivenDocblockType>
    </issueHandlers>
</psalm>
