includes:
    - extension.neon
    - vendor/phpstan/phpstan/conf/bleedingEdge.neon
    - vendor/phpstan/phpstan-symfony/extension.neon
    - vendor/phpstan/phpstan-symfony/rules.neon
    - vendor/larastan/larastan/extension.neon
    - vendor/phpstan/phpstan-mockery/extension.neon
    - vendor/phpstan/phpstan-phpunit/extension.neon
    - vendor/phpstan/phpstan-phpunit/rules.neon

parameters:
    level: max

    paths:
        - src/
        - tests/

    editorUrl: 'phpstorm://open?file=%%file%%&line=%%line%%'

    tmpDir: .cache/phpstan

    ignoreErrors:
        - '#Call to method .+ with .+ will always evaluate to true.#'
        - '#Cannot call method (assertExitCode|expectsOutput|expectsOutputToContain|assertExitCode)\(\) on Illuminate\\Testing\\PendingCommand\|int\.#'
        # Ignore "will always evaluate to false" assertions in tests
        -
            message: '#Call to method PHPUnit\\Framework\\Assert::assertInstanceOf\(\) with .+ will always evaluate to false.#'
            path: tests/
        -
            message: '#Call to method PHPUnit\\Framework\\Assert::assertArrayHasKey\(\) with .+ will always evaluate to false.#'
            path: tests/
        # Ignore class-string issues in tests with ReflectionClass
        -
            message: '#Parameter \#1 \$objectOrClass of class ReflectionClass constructor expects class-string<T of object>\|T of object, string given.#'
            path: tests/
        # Ignore mixed return type issues in tests
        -
            message: '#Method .+::getFacadeAccessor\(\) should return string but returns mixed.#'
            path: tests/
        # Ignore offset issues in test assertions where we're testing dynamic data
        -
            message: '#Offset .+ does not exist on array\{.+\}\.#'
            path: tests/
        # Ignore method return type issues in test fixtures
        -
            message: '#Method class@anonymous.+::getFactory\(\) should return class-string.+#'
            path: tests/
        # Ignore missing value type in iterable issues in test fixtures
        -
            message: '#return type has no value type specified in iterable type array\.#'
            path: tests/
        -
            message: '#has parameter .+ with no value type specified in iterable type array.#'
            path: tests/
        # Ignore undefined method issues in trait test helpers
        -
            message: '#Call to an undefined method object::.+#'
            path: tests/
        # Ignore parameter type issues in tests where we test edge cases
        -
            message: '#Parameter \#\d+ .+ expects .+, .+ given\.#'
            path: tests/Laravel/Facade/
        -
            message: '#Parameter \#\d+ .+ expects .+, .+ given\.#'
            path: tests/Noty/Prime/
        -
            message: '#Parameter \#\d+ .+ expects .+, .+ given\.#'
            path: tests/Toastr/Prime/
        # Ignore call to undefined static method in tests (testing facade methods)
        -
            message: '#Call to an undefined static method .+#'
            path: tests/Laravel/Facade/
        # Ignore offset issues in CSP tests
        -
            message: '#Offset mixed on array\{\}.+#'
            path: tests/Prime/Http/Csp/
        # Ignore method never returns issues in anonymous class mocks
        -
            message: '#Method class@anonymous.+never returns string so it can be removed from the return type\.#'
            path: tests/
        # Ignore cannot call method on null in tests
        -
            message: '#Cannot call method .+ on .+\|null\.#'
            path: tests/
        # Ignore issues with assertArrayHasKey in tests
        -
            message: '#Parameter \#2 \$(haystack|array) of method PHPUnit\\Framework\\Assert::.+ expects .+, mixed given\.#'
            path: tests/
        # Ignore json_decode issues in tests
        -
            message: '#Parameter \#1 \$json of function json_decode expects string, string\|false given\.#'
            path: tests/
        # Ignore Mockery-related issues in tests
        -
            message: '#Call to an undefined method Mockery\\ExpectationInterface.+#'
            path: tests/
        # Ignore VarDumper/Data accessor issues in Symfony profiler tests
        -
            message: '#Cannot call method getValue\(\) on array.+#'
            path: tests/Symfony/Profiler/
        -
            message: '#Cannot access offset .+ on array.+#'
            path: tests/Symfony/Profiler/
        -
            message: '#Cannot access offset .+ on mixed\.#'
            path: tests/
        # Ignore mixed parameter in assertions
        -
            message: '#Parameter \#\d+ .+ of method PHPUnit\\Framework\\Assert::.+ expects .+, mixed given\.#'
            path: tests/
        # Ignore property value type not specified in tests
        -
            message: '#Property .+ type has no value type specified in iterable type array\.#'
            path: tests/
        # Ignore "will always evaluate" issues in tests
        -
            message: '#Call to method PHPUnit\\Framework\\Assert::.+ with .+ will always evaluate to .+#'
            path: tests/
        # Ignore assertArrayHasKey with VarDumper types
        -
            message: '#Parameter \#2 \$array of method PHPUnit\\Framework\\Assert::assertArrayHasKey\(\) expects array\|ArrayAccess.+#'
            path: tests/Symfony/Profiler/
        # Ignore array_keys parameter with VarDumper types
        -
            message: '#Parameter \#1 \$array of function array_keys expects array.+#'
            path: tests/Symfony/Profiler/
        # Ignore config parameter type issues in tests
        -
            message: '#Parameter \#2 \$config of class Flasher\\Symfony\\Profiler\\FlasherDataCollector constructor expects.+#'
            path: tests/Symfony/Profiler/
